From O with B

From O with B

未熟なソフトウェアエンジニアの技術ブログ

Terraform基本

f:id:ishmeal:20210715225642p:plain

コマンド

リソースを表示

$ terraform plan

リソースを作成

$ terraform apply

リソースを削除

$ terraform destroy

Terraformプロジェクトを初期化

$ terraform init

Terraformファイルを整形する

$ terraform fmt

Terraformはプロジェクトフォルダ直下の.tfファイルのみ読み込む

.
├── main.tf(これは読み込む)
├── sub
│   └── sub.tf(これは読み込まない)
└── terraform.tfvars(これは読み込む)

未経験からエンジニアになる際の盲点・・・タッチタイピング

f:id:ishmeal:20210508093334j:plain

Photo by Pereanu Sebastian on Unsplash

自分の学習〜転職活動を振り返って

私は私立大学の文系学部中退で、また前職はいわゆる「ブルーカラー」な現場の下っ端としてあくせく働いていました。

当然のことながらプログラミングやコンピュータに関する知識はほとんどなかったです。

そんな私がプログラミング学習〜転職活動までのあいだに気づいたことや感じたことを、(あくまで一般的な学習ロードマップのプラスαの補足として)初学者の方へ共有していきたいと思います。

英語でタッチタイピング、ちゃんとできますか?

これです。

英語で、タッチタイピングできるでしょうか?

キーボード見ないで打てますか?

そもそもちゃんとタッチタイピング(一昔前で言うブラインドタッチですね)が出来ている人って意外と少ないです。

適切な指で、適切なキーを最短距離で打ちつつ、目線はキーボードにいかない。

タイピングの重要性については↓の記事が参考になります(というか今回はほぼリンク先の記事読んでもらえばいいかも笑)。

datawokagaku.com

私は幸運にも正しいタイピングの大事さを学習の初期に知ることが出来ました。

そのためプログラミング学習の初めの方は、

Progateで学習

疲れたりエラーが出たらタイピング練習

Progateに戻る

タイピング練習

Progateに戻る

というサイクルで下のサイトで息抜き代わりに練習しました。

Typing Test @ AOEU — Your typing speed in CPM and WPM

ここでタイプスピードと正確さを養っておくことはその後の学習やポートフォリオ作り、そして実務に至るまでの圧倒的効率アップに繋がります。

f:id:ishmeal:20210508104909p:plain

引用:https://happylilac.net/sy-keyboard03.html

英語で練習する意味

まさに私がそうでしたが、日本語を打つ時は無意識に打てていたのに英語になると「cってどこだっけ?」となってタイプスピードが落ちてしまう人もいるのではないでしょうか。

それに打ち込むキーの使用頻度も違います。日本語で文章をタイプしていて、xやvや'を打つ機会はほぼないと思いますが、英語およびプログラミングでは頻出です。

プログラミング=英語ではないですが、やはりモダンなプログラミング言語は英語の考え方やリズムに強く影響を受けていると感じます。

将来的に実務で英語のドキュメントを読むことも考えると、やはりエンジニアは英語に対する抵抗を少しでも無くすべきかな、と。

ゴールの目安

f:id:ishmeal:20210508110237j:plain

Photo by Markus Winkler on Unsplash

ひとまず引用先のブログのかめさんも仰っているように、WPM50オーバーぐらいあれば、そのあとは実際にコードを書いていく中で記号キー等に徐々に慣れていけばいいかなと思います。

ちなみに最初のころの私はWPM30〜ぐらいでしたね……。キーボードと画面を何回も目線が往復しながらタイプしてました。

あとバックスペースキーを右手の薬指で打つ……というか本来小指で打たなきゃいけない大部分のキーを薬指で打ちにいく妙な癖がありましたね。これは今でも時々やっちゃいますが笑

でも2,3週間しっかり練習すると、調子がいい時はWPM60〜ぐらいはでるようになりましたし、タイプミスもほとんどなくなりました!

プログラミング初学者の方たちは正しいタイピングをできるだけ早く身につけることをオススメします!

少し前まで初学者だった自分なりの見解

こういうことは、長いキャリアのあるエンジニアの方たちにとっては「当たり前」なので、いちいち言及する人は少ないかと思います。

別にチャンピオンレベルまで極める必要はありません。スピード自体は速いに越したことはないですが、大事なのはコードの中身です。

とはいえ、今振り返ると学習初期のタイピング酷すぎたなぁ……と感じます笑

この記憶が薄れる前に、初学者の方たちへの共有でした。

ではまた!

PHPUnit入門・・・②失敗の動作確認〜別ファイルの関数をテストする

PHPUnit

続きです。

ishmeal.hatenablog.com

↑前回の記事

テストを失敗させてみよう

面倒な人は飛ばしたり眺めておくだけでオッケーです。

// ExampleTest.php

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function testAddingTwoPlusTwoResultsInFour()
    {       
        $this->assertEquals(5, 2 + 2); //「4」を「5」に変更
    }
}

前回書いたテストの「assertEquals」の第一引数に5を入れます。

つまりこれは「2 + 2は5だよね?」と問うているわけですね。

もちろんこれは……

$ phpunit tests

There was 1 failure:

1) ExampleTest::testAddingTwoPlusTwoResultsInFour
Failed asserting that 4 matches expected 5.

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.

失敗してしまいます。

「5 を期待していたのに結果は 4 でした」的なことも書いてありますね。

失敗すると「Failures」に数値がカウントされます。

確認したらもとのようにExampleTest.phpのassertEqulsの第一引数を「4」に戻しておきましょう。

// ExampleTest.php

<?php

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{  
    public function testAddingTwoPlusTwoResultsInFour()
    {      
        $this->assertEquals(4, 2 + 2); //もとに戻しておく
    }
}

PHPUnitの基本

初めてのテストを書く&実行を通じて、

  1. テストファイルを「○○Test.php」の名前で作る

  2. assertEqual()の第一引数は期待値、第二引数は式(関数)

  3. テストファイルの基本フォーマットは↓

<?php

use PHPUnit\Framework\TestCase; // 基本的に絶対書く

class 「ファイル名」 + Test extends TestCase // これも基本的に絶対書く
{
    public function test + 「○○()// ←わかりやすいテスト名にする
    {      
        $this->  // ここにassert○○を書いていく
    }
}

といったことがわかりました。

でも今の所はプロジェクトフォルダ直下にはtestsフォルダとvendorフォルダしかなく、

テストも「2 + 2」がちゃんと動作しているか確かめただけです。

実際の開発で「2 + 2」をテストすることは......まずないと思います笑。やはり自作の関数をテストするはずです。

というわけで次はテスト対象になるファイル及び関数を作りましょう。

Function.phpファイルのadd()メソッドをテストする

Fuction.phpを作成

プロジェクトフォルダの直下に「Fuction.php」を作成しましょう。

$ touch Fuction.php

中身は以下のようにします。

// Function.php

<?php

 function add($a, $b) {

     return $a + $b;

 }

上の関数add()は第一引数と第二引数を足した値を返します。

ってこれ「2 + 2」の時とあんま変わらんやんけー!ってなるかもですが何事も一歩ずつです。

ではこれをテストするテストファイル「FuctionTest.php」をtests配下に作成します。

$ touch tests/FunctionTest.php

↓がFuctionTest.phpの中

<?php

use PHPUnit\Framework\TestCase; 

class FunctionTest extends TestCase
{   // 正しい値を返すテスト
    public function testAddReturnTheCorrectSum()
    {   //  テストするファイルを指定する
        require 'function.php';
        // 今度は第二引数にfuction.phpで定義した関数を入れる
        $this->assertEquals(4, add(2, 2));
    }
}

意味としてははじめてのテストと同じことをしています。

つまり「2 + 2 は4になるよね」というテストなわけですね。

しかし今回はrequire の後にテスト対象のファイルを指定し、そこから関数を呼び出しています。

$ phpunit tests/FuctionTest.php

わかりやすいように今回はファイル名まで指定してテストしましょう。これでFuctionTest.phpだけが走ります。

$ phpunit tests/FuctionTest.php

(略)

OK (1 tests, 1 assertions)

うまく通ったと思います……!

ちなみにassertEqulsをもう一個足してもオッケーです

<?php

use PHPUnit\Framework\TestCase; 

class FunctionTest extends TestCase
{   // 正しい値を返すテスト
    public function testAddReturnTheCorrectSum()
    {   //  テストするファイルを指定する
        require 'function.php';
        // 今度は第二引数にfuction.phpで定義した関数を入れる
        $this->assertEquals(4, add(2, 2));
        $this->assertEquals(8, add(4, 4)); // ←もう一個assert文を追加
    }
}
$ phpunit tests/FuctionTest.php

(略)

OK (1 tests, 2 assertions)

この場合だと2つのassert文が通ってはじめてテストが1つパスしたとなります。

よりチェックすべき観点を細かくしたい場合はこのように複数のassertを入れることができます。

参考にしている教材

私自身はUdemyにて下記教材を購入して勉強中です。

www.udemy.com

て、これE, Eigoじゃん・・・と思うかもしれませんが、ゆっくり聞き取りやすく発音してくれているのでそこまで英語に自身がない人でも全然進められると思います!

グローバルなWebサービスなので、ネイティブ以外の方が受講されるのも想定済なのでしょうか。

動画や音声で学びたい!って方は上の講座おすすめです!

本ブログではなるべく初心者目線で深堀りしすぎない記事を発信していくつもりです。

ではまた〜。

PHPUnit入門①・・・インストールから初めてのテストまで

f:id:ishmeal:20210505164355j:plain

きっかけ〜PHPUnitって意外と入門〜実務レベルまでの記事なくない?

PHP開発で単体テストをコード書いて自動化していきましょ〜ってなったときにまっさきにあがるものとして「PHPUnit」があると思うんですが...

調べていくとなかなか体系的にステップを踏んだ記事がない。

わりかし「これはこう。これはこう」なさらっとした「すでにある程度テストコードを書くことが何たるかは知っている人の確認用」の記事が多めな印象。

もちろん公式ドキュメントもあるけど……自分みたいな実務経験の乏しい人間にはなんというか、こう、腹にストンと落ちる感じがしない。

「これどうやって勉強したらいいの?」ってなったので、いい機会だからブログ立ち上げて手を動かしつつ学習記録&PHPUnit初学者への共有として書いていきます。

スペック

・いわゆる「駆け出しエンジニア(実務経験3ヶ月未満)」

Ruby on Rails と Laravelでポートフォリオ作った経験はあり(他にAWS, Docker, CIツール等)

・『Railsチュートリアル』で学習したので、Minitestは書き写した書いた経験あり。

・転職成功&エンジニアとして入社はしたもののまだ本格的な開発経験なし。ただPHP案件に関わる&テストコードを書いていくことは確定なので、本格的な実務にアサインされる前にPHPUnitを習得しておきたい

環境

私自身はmacOSです。 また、お手持ちのPCにPHPがインストール済であることは大前提(Dockerに慣れているなら仮想コンテナ上でも問題なし!)。

参考までに私自身のPHPのバージョンは7.4.18になってます。

そのうえでPHPのパッケージ管理ツールのcomposerもインストール済であること。

Laravel等のモダンなPHPフレームワークには最初からPHPUnitが付いてくると思いますが、 自分が関わるPHP案件はLaravelではないので、生のPHPUnitをインストールします。

一応補足しておくとcomposerなしでもPHPUnitをインストールして走らせることは可能です。

が、おそらく殆どの現場ではcomposerを使用していると思いますので、特別な理由がない限りcomposerを使ってインストールした方がいいと思います。

macOSの方でcomposer未インストールの方はHomebrewの下記コマンド一発でいける(はず)。

$ brew install composer

↑と思ったけどそもそもHomebrew自体準備できていない方はググってください……(初学者は何するにもインストール&セットアップがキツイですね)

インストールから初めてのテストまで

PHPUnitのインストール

先にプロジェクトフォルダを作成しましょう。

$ mkdir PHPUnit(何でもいい)

その上で下記のPHPUnitの公式にあるように

https://phpunit.de/getting-started/phpunit-9.html

$ composer require --dev phpunit/phpunit ^9

上のコマンドを入力し、composerを使って プロジェクトフォルダ上で PHPUnitを落とします。 今回は現時点で最新版のversion9を使用します。

公式のドキュメントにあるように、基本的にPHPUnitはグローバルにインストールするのではなく、プロジェクト単位で管理しましょうとのことです。 ↓

https://phpunit.readthedocs.io/ja/latest/installation.html#installation-global

versionを確認。

$ ./vendor/bin/phpunit --version
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.

うまく落とせましたね。

また、プロジェクトフォルダ配下にvendorフォルダやcomposer.jsonやcomposer.lock ファイルなどが自動生成されていると思います。

エイリアスを設定

毎回pathを書くのも面倒なので、エイリアスを設定しておきましよう。

$ alias phpunit='./vendor/bin/phpunit'

これでいちいち「./vendor/bin/phpunit」みたいに打たなくても、「phpunit」でPHPUnitが動いてくれます。

$ phpunit --version
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.

以上でPHPUnitがプロジェクトフォルダで使えるようになりました。

testsフォルダの作成

準備の最後として、プロジェクトフォルダ直下にテストをまとめて置いておく「tests」フォルダを作りましょう。

$ mkdir tests

はじめてのテスト

では早速はじめてのテストを書いちゃいましょう。

適当な名前でいいのですが「Test.php」が名前に含まれているテストファイルをtestsフォルダの配下に作ります。

「なぜTest.phpを含めなきゃだめなの?」と疑問を持つかもしれませんが、簡単に言うとその方が楽だからです(簡単すぎw)。

のちのち説明&自由な名前でも動作させる方法をまとめますので今のところはとりあえず進めちゃいます!

$ touch tests/ExampleTest.php

↑「tests」フォルダ直下に「ExampleTest.php」を作成します。

↓「ExampleTest.php」の中

// ExampleTest.php

<?php

// PHPUnit使いますよ〜のおまじない(基本思考停止で絶対書くもの)
use PHPUnit\Framework\TestCase;

// TestCaseを継承した○○Test(ファイル名)クラスを宣言(これも絶対書く)
class ExampleTest extends TestCase
{
   // 訳すと「2 + 2 の結果は4だよねテスト」。わかりやすい名前は大事、ゼッタイ。
    public function testAddingTwoPlusTwoResultsInFour()
    {
       // 「this」がいまいち理解できないなら「基本書くやつ」ぐらいの認識でもいいと思います。
        $this->assertEquals(4, 2 + 2);
    }
}

assertEqulasって?

assertEquals()は「第一引数と第二引数はイコールだよね?→True or Falseで返す」みたいなメソッドです。

assertEquals()の第一引数は期待値、つまり「こうなったらテストは合格!」な結果を書きます。

今回の場合ですと、「2 + 2 の結果は4だよね」テストなので、期待値はもちろん「4」です。

第二引数には式、またはテストする関数を書きます。

おそらく実務ではほぼ他のファイルの関数を呼び出すことになると思いますが、今回のように式を直接書いてもオッケーです。

今回の場合は「2 + 2 の結果は4だよねテスト」なので、「2 + 2」を書きます。

ちなみに「assert」という言葉は他の言語でテストする際にも嫌というほど見ると思うので、テスト初心者(私もですが)は慣れておいた方がいいでしょう。

辞書的な意味では「主張する」「でしゃばる」みたいなことが書いてありますが、ソフトウェアテストの文脈で使うときは、

上司「テストAの結果は○○だよね?(圧力)」=「assertEquals(○○, テストA)」

部下「はい!」= 「True(テスト成功)」

上司「まさかテストBの結果が●●なんてことはないよね?(圧力)」=「assertNotEquals(●●, テストB)」

部下「い……いいえ」= 「False(テスト失敗)」

という強制的に「はい or いいえ」の二択をプログラムに問うているニュアンスで理解した方がいいと思います。

こんな上司嫌ですねぇ……笑

テスト実行

それではterminalで初めてのPHPUnitを走らせて見ましょう。

「testsファイル以下を全部テストする」という意味で以下のコマンドを打ちます。

$ phpunit tests

(略)

OK (1 tests, 1 assertions)

テストを1つ実行、1つのアサーションメソッドを実行して「OK」つまりパスしました。

これでPHPUnitの初めてのテストの終了です。

今後

次回は失敗や例外のテストから始めます。

一通りテストについて書いたら、TDD風な流れで簡易TODOアプリ開発とかやりたい。

ではではまた次の機会に