青空な日々

ITエンジニア関連で興味あることをアウトプットして共有したいブログ

Laravel JP ConferenceのPHPテストワークショップにチームで登壇した感想

はじめに

2019年2月16日(土)にLaravel JP Conferenceというカンファレンスにて、
『エンジニアの登壇を応援する会』チームの一員としてワークショップを開催してきました!

Laravel JP ConferenceとはPHPフレームワークのひとつであるLaravelのカンファレンスです。

Laravel JP Conferenceについて詳しくはこちら。
conference2019.laravel.jp


私達が作成した問題や資料はこちらから。
GitHub - engineers-lt/laracon: PHP テストワークショップ @ Laravel JP Conference


目次


感想

参加の経緯

いきなりですが、Laravel未経験者です。
厳密に言うと開発環境を作ったぐらい。
PHPは5系を2年半ほど業務でやってましたが、
10年ほど使われているオレオレフレームワークでした。
なので、PHPフレームワークを使ったことはありません。
(というかどの言語でもフレームワークを使ったことはないかも…)

そんな私が登壇側でなぜ参加できたかというと、
たまたま『エンジニアの登壇を応援する会』の中で参加者を募集していたところに参加できたから、です。

参加を申し込んだ当時、業務でLaravelで開発しているAPIがあったので、
自分もそのうち使いそうだから勉強しなきゃなーとは思っていました。
そのため、これは渡りに船!ということで参加しました。

このときはカンファレンスに登壇するような強いエンジニアのアウトプットを後ろから見て勉強しよーっと思っていたので、
登壇しようとかはまったく考えていませんでした。

ですが、みなさんいろいろと忙しかったようで、
手が空けられる参加者の一人として登壇する側になりました。

『エンジニアの登壇を応援する会』についてはこちらから。
public/エンジニアの登壇を応援する会 参加ガイド/README - esa-pages.io


準備

LaravelのカンファレンスなんだからLaravel使わなきゃ!と思っていましたが、
別にLaravel 必須じゃなくてもOKでした。
そのため、初心者向けにPHPでテストコードを書く体験をしてもらう!という基本方針が決まりました。

というわけで、ワークショップの内容は以下の3つに決まり、
私は本格的なテストのハンズオンを担当することになりました。

  • テストのメリット・デメリットを再確認
  • 初めてのユニットテスト
  • 本格的なテストのハンズオン


登壇でアウトプットするためのインプット

私は業務で自動テストとしてのユニットテストを書いた経験はありません。
前職のWeb系ではPHP + Seleniumを用いたUIテストの自動化でテストコードを書いていました。
また現職のAndroidアプリ開発ではコードがレガシー過ぎてユニットテストが書けないため、書いていません。
レガシー脱却のためのアーキテクチャ検証アプリを作った際にテストコードを書いたくらいです。

そのため、まずはPHP7系の勉強とPHPユニットテストについて勉強するところからはじめました。
前述したとおり私は5系のPHPしか触ったことがありません。
そのため、まずは7系のPHPについて勉強したり、
パッケージ管理システムであるcomposerについて勉強しました。

次にPHPユニットテストについてですが、
PHPUnitを使ったテストコードを書くのがメジャーです。
ですが他にもassert、phptといった別の方法もあります。
今回はLaravelにも組み込まれているPHPUnitで行くことにしました。

その後はハンズオンで参加者に問いてもらう問題を作成し、
私は4問、別のチームの人に2問作ってもらいました。

当初は3人で2問ずつ、計6問の予定でしたが、
私以外の2人は多忙で1問も作成できず、急遽私が4問、
別の人にヘルプを出して2問作成して頂きました。

最悪は自分ひとりで6問やるつもりで予定を立て動いていましたが、
ヘルプして頂けて正直助かりました…。ありがたや。

また問題の内容としても一人で作ると方向性が偏るので、
別ベクトルの問題が作成できてよかったと思います。

問題作成のほか、当日喋る原稿や問題の説明、回答例、解説を作成しました。

打ち合わせやリハーサル

事前に何度か集まって、前述の方針や内容を決めるための打ち合わせを行ったり、
ワークショップの流れを確認するためにリハーサルを行いました。

チームの普段のコミュニケーションはSlackが中心でした。
ですが、こういった打ち合わせやリハーサルで顔を合わせることで、
より深い意思疎通ができたのが非常によかったと思います。

特にリハーサルではメンバー以外の方に参加して頂いて、
様々な指摘をもとに改善することができ非常に有意義でした。ありがたい。

当日

当日はちょっと早めに会場入りして、
スタッフ控室で他のメンバーの登壇練習に付き合っていました。

私の担当が喋るより問題を解いてもらうほうが中心だったので、
私自身はさほど緊張もしておらず、かなりリラックスしていたと思います。

ですが、どんなに準備しても予想外のことは起こるもの。
通常の登壇のように参加者の前にPCと一緒に立ち、
手元で資料を見ながら喋れると思いましたが、会場の都合でそれができませんでした。

PCはプロジェクターと一緒に参加者の後ろにおいてあったので、
登壇者はPC無しで参加者の前に立たなければなりませんでした。

当然原稿を暗記などはしておらず…。

仕方ないので近くのコンビニまで行って原稿を印刷してきました。
印刷完了は開始5分前を切っており、控室から自分のPCを持ってくる暇すらなかったです。

あとLaravel JP ConferenceのTシャツ来たまま行ったのでちょっと恥ずかしかったw

始まってしまえば大きな問題はありませんでした。
しかも当初から満席!
ちょいちょい途中退出する方がいて空席になっても途中参加者で埋まり、
終わる頃も16席満席のままでした!
ありがてぇ。ありがてぇ。

チームが心配していた参加者からの質問も概ね問題なく答えられたと思います。
いま思えば頂いた質問をまとめておけば振り返りできたので、メモしておけば良かった…。

質問の中には業務でテストを導入する際の方針についてアドバイスが欲しいと言ったようなものもあり、
最善ではないと思いますが、私が思う話をさせていただきました。
大事にしたほうが良いと思うポイントは伝えられて、納得して頂けたようで良かったです。

もちろん、細かい点ではミスや反省があり、
今後に活かしていきたいと思います。

  • ハンズオンで解いてもらう解答にミスがあった(テスト条件のタイポ)
  • 比較的会場が狭くて人数が増えた関係で暑くなってしまった
    (これは会場の都合もありますが、うちわを用意するとか工夫は出来たと思うので…)
  • すぐ動かせるサンプルが無かったのでPHPUnitの動きをすぐ確認することができなかった。
    スライドに参考で載せていたコードが写景しても動かないものだったことと、
    参考のコードが問題の1問目と似ていたため参加者に混乱させてしまった。
  • 回答例をMacでしか動作確認しておらず、Windowsで動かなかった。
  • 問題を解くことで学ぶ!ことを重視していたが、
    setUpメソッドについては事前の解説に含めたほうが良かった。
  • dataProviderの解説で実装方法を説明していなかった。
    回答例のコードを見れば分かりますがアノテーションはコメントに書くので、
    コメントを省略して写景した参加者に誤解をさせてしまった…。


最終的にアンケートの結果をみるとほぼ高評価だったので良かったです。
解答率も9割に近いような…。すごい。

全体的な感想

パッと思いついたことを箇条書きで。

問題作成の進め方について思い通りに行った

前述したとおり、問題作成は当初3人で2問ずつ、計6問の予定でした。
この予定を立てたとき、最悪のケースを想定し自分ひとりでも6問作れる、
という自信があったのでこのスケジュールにしました。

実際に4問は自分で作成しました。
残りの2問も、まだ自分で作っても間に合うけど誰か作ってくれたらラッキーくらいの思いでヘルプを出したものでした。

これは他の2人を信用していなかったのではなく、
私が責任を取ると宣言したのでそれを果たすためには手段を選ばなかっただけ、です。

時間は使いましたが、想定の範囲内に収められたので良い自信になりました。

意見の受け入れ方について

毎回ではないですが、なにか意見を言われたときに現状の方針を説明しようとしているときがあったので良くないなぁと思いました。
これはともすれば言い訳に聞こえるので、もっと言い方を考えたり、
一度素直に受け取ってから「現状はこういう方針だけどこう変えてよいか?」という聞き方の方が良かったと反省しました。

他のメンバーのレビューについて

作業予定に他のメンバーのレビューを入れていましたが、
もっと積極的にやればよかったと思いました。

特にもともと自分が予定していた後に出てきた他のメンバーのアウトプットはほぼ見ませんでした。
これは自分が予定したレビュー予定が過ぎたため、
自分の中でレビューは終わり!という認識になってしまったのが良くなかったと思います。

レビューするためにレビューするのではなく、
参加者により良いワークショップを提供するのが目的のレビューなので、
最後までキッチリ関わるべきだったと反省しました。

アンケート結果が良かった

具体的な内容は書きませんが、
自分が担当した部分のアンケート評価の半数が高評価だったので良かったです。

自由記述の感想にも8割ほどの方に記入して頂き、
良かった点や改善点を頂けて非常にありがたいと思いました。

実際に参加者からの声を聴くと嬉しいですね。

おわりに

というわけで、PHPテストワークショップをやってきた感想でした!

こういう機会が貰えたこと、
良いチームに恵まれたこと、
当日は満席にできたこと、
どれも感謝しか出てこない感じです。

特にチームの皆さんにはいろいろお世話になりました。
方針決め、問題の作成、レビュー、技術的な支援、リハーサルの準備など…。
本当にありがとうございました!

楽しかったのでLT登壇以外でもこういった登壇をやっていきたいと思います!


最後に宣伝です!
平成の情シスおかしんさんのご厚意により、
技術書典6は委託という形で技術書の頒布ができることになりました。ありがたい!
私は「はじめる技術 つづける技術」というタイトルで、
何かを始める時、続ける時の工夫や事例などを書いたノウハウ本を出します。

おかしんさんはゼロトラストアーキテクチャについての本ということなので、
こちらもぜひよろしくお願いします!

ブース番号などの詳細は決まり次第、告知していきます。
またハッシュタグ#はじめる技つづける技術でもいろいろ呟いていきますので、よろしくお願いします!