酒と開発の日々

飲酒大好き駆け出しエンジニアのブログ

Codeceptionを自社のプロジェクトに導入した話

皆さんこんばんは。ぐーどらです。

3月頃からアサインしているテスター業務に4月入社の新卒の女の子をアサインされ、完全に駆け出しってなんもわからんとなっています。

白羽の矢が立つ

部長「codeceptionっていいねぇ。入れてほしいなぁ(チラッチラッ」

噂には聞いていましたし、自社にテストコード無いのは大問題だと思っていたので、codeception入れたいなあと思っていました。まさか本当に駆け出しの自分にテストフレームワークのインストールとコードの記述の仕事が回ってくるとは思っていませんでしたけどね

 テストコード書けるのは良い経験になりそうなので、とりあえず頑張る。とりあえずCTOとのやり取りは若干盛ってますが大体そんな感じ。すっげえ雑に振られました。

codeceptionとは

ご存知の方も多いでしょうが、PHPのテストフレームワークです。対応するFWも多く、LaravelやCakeは当然のこと、CodeIgniterやSymfony、Phalconなど、考えうるPHPフレームワークでほぼほぼ動作するテストフレームワークです。

公式はこちら。

Codeception  

やったこと

新卒ちゃんのトレーニングとテスト実行業務とcodeceptionの導入など。駆け出しエンジニアのはずなんだけどどうしてこうなった

WindowsPHP CLIとcomposerとcodeceptionを入れる

PHPとcomposerはこちらを読んでいただいている方々には今更なんで書きません。Windows環境なので、codeceptionのインストールもcomposer経由が一番簡単そうと感じました。

$ composer require codeception/codeception --dev
(中略)
the requested PHP extension curl is missing from your system

おいまじか

Windowsもう嫌、Docker使えないし、だいたい使うPHP拡張がデフォルトで用意されてないし、そもそもターミナルコマンドがLinuxと違うしetc (ビルドやんなきゃだめかなあ)と一瞬Windows環境でビルドをするという苦行が頭をよぎりましたが、冷静にphp.iniを覗き、見つけたextension=curlコメントアウトを外したらcurl有効になりました。公式ありがとう!そして心臓に悪い。

とりあえずPHP Browserでログイン処理を書いてみた

$ ./vendor/bin/codecept bootstrap
$ ./vendor/bin/codecept generate:cept acceptance login

cedeceptionで自動生成できる形式にはCept形式とCest形式があるようで、cePtはPlaneで、ceStはSimpleだとか。とりあえずPlaneのほうがより簡素。

# acceptance.suite.yml
actor: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: https:(プロジェクトのURL)
        - \Helper\Acceptance

公式に書いてあったこと丸コピですね。わかります。

// loginCept.php
<?php
I = new AcceptanceTester($scenario);
I->wantTo('ログインテスト');
I->amOnPage('/login');
I->fillField('login_id', '/*プロジェクトで使っているID*/');
I->fillField('password', '/*プロジェクトで使っているパスワード*/');
I->click('ログイン');

とりあえず実行。

$ ./vendor/bin/codecept run
Acceptance Tests (1) -------------------------------
✔ loginCept: ログインテスト
----------------------------------------------------

Time: 1 second, Memory: 10.00Mb

OK (1 test, 1 assertions)

めちゃ簡単だった

PHP BrowserではJSで生成されるリンクがクリックできないようなので、ChromeWebDriverを入れ、acceptance.suite.ymlを編集します。

# acceptance.suite.yml
modules:
    enabled:
       - WebDriver:
         url: https:(プロジェクトのURL)
         window_size: false
         port: 9515
         browser: chrome
         capabilities:
             "goog:chromeOptions":
      - \Helper\Acceptance

codecept runで動きました。簡単。

今後やりたいこと

  • dl要素で生成されているボタンをクリックできるようにする。

  • チェックボックスを扱えるようにする。

  • プロジェクトに最適なテストコードを書く

特にプロジェクトに対して最適なコードを書く方法がわからなくて宙に浮いている感じがしています。何かいい本などあったらぜひ教えてください!

Discordで分報を作ってみた話

みなさん初めましての方は初めまして。そうでない方はこんにちは!ぐーどらです。

昨日ProLaboさん主催のもくもく会に参加してきたのですが、6時間近く何故PHPコンテナがビルド直後に落ちてしまうのか原因がわからず、結局近くの人に助けてもらったら5分で解決し、泣きそうになりました。

ここから本題(背景)

先日write-blog-every-week というコミュニティに参加させていただきました。 こちらのコミュニティは1週間に1記事はブログを書き、書けない週が2週間続いた場合は退会というコミュニティです。 心機一転ブログでのアウトプットを習慣化したかったため、参加させていただきました。

さて、私はそちらのコミュニティとは別に、エンジニアの登壇を応援する会というコミュニティにも所属をしていて、そちらでのSlackでは分報というチャンネルを用意しています。 分報の考え方や使い方は、別の方が書かれた記事があるので、私からの説明は割愛します。

tbpgr.hatenablog.com

気軽に褒め合う文化の醸成された分報は作ってみたい反面、エンジニアの登壇を応援する会ではコミニティへの参加者が300人を超え、Slackのすべての発言が2週間後には消えている状態です。 そのため、分報を作ることに適しているのは本当にSlackなのか?という疑問を持つ人がコミュニティの中で徐々に増え、私自身もその一人でした。

Slackに変わる分報の運用に向いているサービスは無いか考え、一つの答えとしてDiscordを考えました。

discordapp.com

何事も実践するのがポリシーな私は、Discordのサーバー機能を使い分報を作り、仲の良い友人間で使ってみたので、いいところ悪いところをシェアしたいと思います。

Discordで感じた不便さ
  • POSTに対してスレッドを作れない
  • 移行時に記法を覚えるコストが発生する

この2点が大きいところかなと思います。 特に他人の発言からスレッドが伸ばせるところはSlackの大きな利点の一つだなと再確認できました。話題を膨らませられるけれども、パッと見のチャンネル自体には表示されないため、流れを分散させることが出来るところがSlackの利点です。 逆にプレビューが表示されたりといった部分はDiscordもSlackも変わらず可能でした。

新しいサービスを使うことになるので、記法を覚えるコストがかかるというのは当然といえば当然ですが、やはり発生するものだと思いました。

意外に変わらないところ
  • 絵文字の使用、追加ができる

エンジニアの登壇を応援する会では、Slackのデフォルトの絵文字に加え、コミュニティで独自に作成した絵文字を使用しています。それに準ずる絵文字を追加する機能はあるの?ということで調べてみましたが、ありました。

arutora.com

ただしSlackとの違いの一つで、Discordはデフォルト時のテーマがダークであり、背景が暗いです。白背景のテーマに設定することもできますが、各々が設定することになるため、両方のテーマで見やすい絵文字にしなければならないというSlackでは考える必要がなかった部分を考慮する必要が出てきます。

Discordの便利なところ
  • とにかく通話周りが便利

Discordはゲーマー向けボイス&テキストチャットを謳っているだけあり、通話が楽です。

今回はサーバー運用していることを前提ですが、サーバーで通話を行う場合はボイスチャンネルを用意し、そこでの参加者間で通話をすることになります。 ボイスチャンネルは常設型で、通話をしたい人がそのチャンネルに入り、終わらせたければ自分がボイスチャンネルから抜けるという非常に気楽に通話が始まり終わる形になります。 さらに音質も非常にいい上、通話全体のマスタ音量だけでなく特定の参加者だけ音量を調節するという小回りも効く作りになっており、通話に関しては大変充実しています。

結論

  • DiscordはSlackの代わりではないが便利。通話をしたいのであればDiscordがおすすめ。
  • テキストベースでのやり取りはSlackに軍配。スレッド機能はSlackにしか無い。
  • テキストの保存上限は現状不明(参加者が3人のみのため、上限に達していない)

上記が結論になります。コミュニティの運営という部分に絞ると、最初から通話してもいいという人は稀かなあという気がしていますので、実際に会うなどの関係性が構築されるまではSlackが最適だなと感じています。 逆に打ち合わせを綿密に行う、声でのやり取りを行うシーンではDiscordに軍配が上がると考えています。伊達に"Skype、TeamSpeakの時代は終わりを告げた…!"なんて煽り文句載せていないなと思いますね。

大人数でのコミュニティでのやり取りに向いた方法ってよくわからないなと思う次第でした。