PHPカンファレンス福岡2019 #phpconfuk に実行委員として参加しました!

PHPカンファレンス福岡2019に実行委員として参加しました。

今年の実行委員長 (@tsubakimoto_s さん)、来年の実行委員長 *1 (@seike460 さん) がブログを既に書かれているので、それに続こうと思います。

tsubalog.hatenablog.com

https://blog.seike460.com/2019/07/03/phpconfuk2019/blog.seike460.com

完全に運営視点の話になりますので、参加者目線のブログは公式サイトにこれから掲載されていくものをご覧いただければと思います。

目次

きっかけと役割

去年のPHPカンファレンス福岡2018では人生初となるLT登壇をさせていただきましたが、今年は実行委員として参加したいと思っていました。そんな折、OSS Gate Fukuokaにサポーターとして参加した際、実行委員長の@tsubakimoto_s さんとご一緒する機会があったため、参加したい旨を伝えたところ快諾していただき、参加することとなりました。

初めての参加なので、当日スタッフぐらいで軽く関わるようなイメージでしたが、結果的にはグッズの発注、当日の司会(スポンサー読み上げ、HASIGOホール)まで任せていただき、かなり深く関わらせていただきました。 何度かイベントの運営には関わらせていただきましたが、200人を超える規模の運営は初めてで、とても貴重な経験となりました。

ここがすごいよ、PHPカンファレンス福岡運営

実行委員として関わって、ここがすごいと思った点をいくつか書いていきます。

ボランティアベース

実行委員ですが、基本的に全てボランティアでの参加です。日々の業務もある中、この規模のイベントの運営を自分の時間を削って行っている皆さんの姿に、自分も頑張らなくてはと刺激を受けながら関わりました。

当日までのやりとりはほぼオンラインで

デザインや発注、決めごとなどのやりとりはBacklogの課題ベースで行いました。Facebookのグループもそれを補助するように利用しました。

顔合わせは最初のキックオフとセッション採択会議、最後の詰め、前日準備の4回程度で、当日が初顔合わせという方もいました。オンラインだけでのコミュニケーションってどうしても難しさがあるので、これはすごいことだと思います。

当日もチームワーク抜群

当日はもっとピリピリするものと思っていましたが、そんなことはなく、和やかな雰囲気の中、進行しました。途中予期せぬ出来事がいくつか起こった時も、当日用Slackで共有して迅速に対応していました。チームワークは抜群でした。

嬉しかったこと

個人的に嬉しかったことを書いていきます。

スポンサー読み上げ

間違えがあってはならないとかなり緊張して迎えたスポンサー読み上げですが、ご好評だったようで何よりでした。

終わったあとハッシュタグを眺めてにやにやしていました。

(なお、僕のしゃべりがゆっくりだったのも原因か、開会式のあとの午前のスケジュールが5分押してしまったのは内緒です。ご迷惑おかけしました。)

みんなで練り上げたものが評価されると嬉しい

議論を重ねた結果、こうした方がいいのではないかと決まったことが、参加者の方の生の声で評価されると実行委員としては本当に嬉しかったです。

僕が関わったものの一例としては、ネームカードを去年の表面だけからタイムテーブルなどを印刷した裏面も加えた、というのがあったのですが、ご好評だったようです。

みんなで練り上げた甲斐があったなぁと思いました。

どんどんツイートしてね!

参加者の皆様、こういう「いいね」と思ったことがあったらどんどんツイートしてください。実行委員は泣いて喜びます(笑)。

大変だったこと

大変だったこととしては、普段デジタル製品ばかり扱っているせいで、グッズの発注作業はなかなか慣れないことで苦労しました。

デザイナーの @torchright さんに仕上げてもらったデザインを元に発注したのですが、業務であまり関わらないaiファイルなどを扱う必要があり、割と大変でした。金額が大きなものもやらせてもらったので責任も大きかったです。

あとは、袋詰め作業をしている時に、「あれ、エコバッグ足りない?」という声が上がった時は発注を担当していたので心臓が縮み上がりました(結局足りてました 笑)。届いてみないと分からないアナログ製品の難しさを感じました。

謝意

改めて、このイベントを成功に導いてくださった、スポンサーの皆様、登壇者の皆様、参加者の皆様、誠にありがとうございます。そして実行委員の皆様、半年間、本当にお疲れ様でした。

また、一人として欠けては成り立たなかったことですが、この場を借りて、以下の方々に特に感謝の意を表したいと思います。心よりありがとうございます。

  • 初めての参加にも関わらず快く受け入れてタスクを任せてくださった実行委員長の @tsubakimoto_s さん
  • 「ここまで目が届くか!」というところまで気配りしていただいた @akase244さん
  • HASIGOホールの司会で柔軟にサポートしてくださった @youukkari さん

青春謳歌

余談ですが、僕は高校中退して引きこもり生活が長かったこともあり、青春と言える時代を過ごさずに30過ぎまで生きてきました。今回このようなイベントに関わることができ、いくつになっても青春って送れるものだなぁと思いました。大きな文化祭をやってる感覚というか。

30歳を迎えたPerfumeの3人が2018年カウントダウンライブで肩を組み合って「青春謳歌!」と叫んだのが僕は大好きなんですが、まさに自分は青春謳歌できてると感じました。まだまだ青春謳歌していきます!

最後に

さて、最後に。

去年も言いましたが、今年も言います。

PHPカンファレンス福岡最高!

*1:PHPカンファレンス福岡では懇親会で来年の実行委員長が決まるという恒例行事があります

もっと早く読みたかった―良いオブジェクト指向設計とは何かを教えてくれる名著『オブジェクト指向設計実践ガイド』

オブジェクト指向設計実践ガイド』として和訳されている本の第2版であるSandi Metzによる"Practical Object-Oriented Design, An Agile Primer Using Ruby"を読みました。

以前からオブジェクト指向プログラミングに関する名著という評判は聞いていましたが、その期待を裏切らないとても良い本でした。

オブジェクト指向設計とは何か、良い設計をどう実現するか、といったことから、最後はテストの書き方までカバーしてあります。

目次

タイトル

ちなみに、海外では原著初版のタイトルである"Practical Object-Oriented Design in Ruby"から頭文字を取ってPOODRと呼ばれています。略称がある本としてはSICP計算機プログラムの構造と解釈 第2版)やCLRS(アルゴリズムイントロダクション 第3版 総合版:世界標準MIT教科書)などの名著がありますが、そこに並べても引けを取らない本だと思います。

なお、本のタイトルにRubyが含まれていますが、どの言語で設計する場合にも適用させることができる汎用的なことが書かれてあります。ただ単に例としてRubyを取っているだけだと公式FAQにも書かれています。

オブジェクト指向設計とは

著者はプログラミングにおいて変更要求は摩擦や重力のようなもので、避けて通れないものだと書いています。

そして、オブジェクト指向設計とは依存性の管理であると述べています。そのあとで、どういった場合に依存性があるのか、といったことをまず説明し、それをどう管理するか、といったことを解りやすく教えてくれます。

設計の考え方の基盤となる2章、3章が特に面白かった

具体的に継承やコンポジションをどう実装するかという後半も面白く読みましたが、クラスの責務についての2章、依存性の管理についての3章が特に響きました。

何をするか(What)だけではなく、なぜ(Why)を教えてくれたからです。設計の手法は知識として知っていましたが、その前にある段階の考え方に抜けている部分があることに気づけました。

また、後半も、どのように(How)設計をするのかを、実際に自転車や旅行といった具体的なドメインを例に取りながら、コードをリファクタリングにより改善しながら教えてくれます。

メッセージベースで考える

特に腑に落ちた考え方として、設計をする時に、クラスベースではなくメッセージベースで考える、というものがありました。

まずシーケンス図を書いてみることで、どういったメッセージがやりとりされるか洗い出し、そこからどういったクラスが必要なのかを考え出すというものです。ドメインオブジェクトはすぐに気づきやすいですが、その間にあるクラスが浮かび上がることなどを助けてくれる、というわけです。

どういう人が読むとよいか

この本を読むタイミングとしては、入門書を読んである程度オブジェクト指向プログラミングを経験したあと、デザインパターン本やリファクタリング本などを読む前の段階で読むとその後が続きやすくてベストかなと思います。

和書のプログラミング入門書では、継承までは言語仕様として触れますが、コンポジションやテストといったところまで踏み込んでいるものは少ないように感じます。入門書の次の本としてこの本は最適だと思います。

僕は学生の頃、基本情報技術者試験を受ける際に結合度や凝集度といった言葉を勉強しましたが、まだ実務経験がない段階で何のこっちゃさっぱりでした。言葉を詰め込む前にこの本でそういった用語が具体的にどういうものなのか理解できてたら良かっただろうなと思います。

原著初版と2版の違い

僕が読んだ原著2版は公式サイトのFAQによるとハッシュをキーワード引数に変えたりといったRubyの機能をよりいい形で取り入れたマイナーアップデートのようなので、2版が出ている今でも初版の訳書を読んで全然問題ないと思います。

まとめ

良いオブジェクト指向設計とは、クラスの責務が明確で、依存性がきちんと管理されている、ということにまとめられるのではないかと思います。この本ではそれを適度にまとまった形で実践的に教えてくれます。

著者はデザインに答えはなく、コードを整えるアートであると述べています。
完璧なコードを書くことはとても難しいですが、より良いコードを書けるよう、日々試行錯誤し、いい設計が少しでもできるよう考え抜いていきたいと思いました。

リンク

休日は振り返り用に後書きカレンダーをつけてる

最近やっている習慣として、「休日に朝起きてから夕食までやったことの記録を時間も含めてカレンダー上に記録する」というのがあります。

これはあとから振り返りをすることで、その日を有意義に過ごせたかどうか確認するためのものです。

どんな感じ?

具体的にはこんな感じでつけてます:

f:id:tkykhk:20190505203806p:plain
2019/05/05のカレンダー
(POODRは技術書、Rocksmithはギターゲーム、Pathfindはサイドプロジェクトです)

Appleの純正カレンダーアプリを使っているのですが、「勉強・開発」、「生活」、「娯楽」、「趣味」、「運動」といったカレンダーを用意し、カテゴリーを分けることであとから見た時に何に時間を使ったか色で分かりやすくしてあります。
この日は雑用をこなしつつもギター、勉強、開発とバランス良く過ごした有意義な日だったようです。

Apple純正カレンダーがつけやすい

色々カレンダーアプリやログアプリを試しましたが、Appleの純正のカレンダーが一番つけやすかったです。
理由としては以下がありました:

  • キーボードショートカットから楽に入力できる
  • 入力すると過去の予定から候補を出してくれ、カレンダーも分けてくれる
  • スマホからもつけられる

普段使いや仕事ではGoogle カレンダーを使っていますが、この用途にはAppleのカレンダーが合っていました。
あとはグラフにするレポート機能とかがついてるともっといいかもしれませんが、そこまで厳密に振り返りをやるのはきつい気もするので満足しています。

運用のコツと副産物

続けるコツとしては、マイクロマネージしないために予定名は雑にして、時間の区切りもだいたいにするということです。
あとは終日予定がある日なんかは記録を忘れて楽しむためつけていません。

振り返りができるというのが一番大事な部分ではありますが、副産物として「記録をつけるからには無駄に時間を過ごさない」という推進力が働くというものがありました。

まとめ

自分みたいなログ好き人間じゃないと合わないかもしれませんし、「休日ぐらいダラダラ好きに過ごさせてくれよ」という人も多いと思いますが、休日の過ごし方を見直す習慣としてけっこうおすすめです。

オンライン勉強グループ「きまべん」で10連休イベントやります!

@gaaamiiさん主催のScrapboxを利用したオンライン勉強グループであるきまべんでイベントをやることになりました。

題して、、、

1000ページ突破記念!平成→令和10連休きまべん

(僕の名前付け力の足りなさが露呈していますがそこは突っ込まないであげてください。)

きまべん is 何

きまべんについては僕が以前に書いたこの記事を読んでくださると雰囲気がつかめると思います。 tkykhk.hatenablog.com

短くまとめると、Scrapboxのプロジェクトに各々が勉強(や開発など)の記録を日ごとのページにつけて、他の人のページにコメントを書いたりして励まし合いながら、時々Slackでダベったりするという緩い勉強グループです。

プログラミングの勉強をしている人が多いですがジャンルは問いません。

経緯

イベントをやることになった経緯ですが、今年1月に1000ページを突破しており、それを記念して何かやりたいとは言っていたもののやれずにいました。

そうこうしているうちに10連休を迎えるわけですが、今回僕は10連休をプログラミングに注ごうと思っており、どうせなら並走してくれる人がいれば心強いなと思いました。

じゃあ、きまべんで10連休をイベントにしちゃって、1000ページ突破記念も一緒にやっちゃえば楽しいのでは、となった、というような経緯です。

どういうイベント?

イベントといってもそんなに大層なものではなく、普段どおりに記録して、10連休が終わるタイミングで成果物なりをまとめたページを1つ作る、という緩いものです。長い休みを使って何かやった、という証跡が残せればいいなという狙いです。

参加しませんか?

こんな感じでイベントをやろうと思っていますので、「10連休は勉強するぞ」とか、「予定ないなぁ」とか、「勉強仲間欲しい」とか、そういう方がいたら、是非この機会にきまべんに参加してみてください。

お待ちしております。

『Refactoring, Second Edition』を読んだ

本書は最近ではマイクロサービスの提唱者として有名なMartin Fowlerによる、リファクタリングという言葉を広く普及させた名著の第2版です。1999年の初版発売から実に20年近くぶりに刷新されました。

例に使用する言語は初版ではJavaでしたが、第2版ではJavaScriptになったことでも話題になりました。一番広く読んでもらえる言語であろうということが採用に至った理由のようです。

martinfowler.com

まだ日本語訳版は出版されていないですが、InformITで電子版を購入し、著者がCanonicalバージョンと呼ぶブラウザで読むWeb版を読みました。

構成

本書は以下のような構成になっています。

Kent Beckによるテスト駆動開発本と同じく、いきなり原則から入らず、まずは小さな例を取ってリファクタリングがどういうものか導入するという構成になっています。そのためリファクタリングがとても実践的なものだということが実際の例で解り、その後に続く原則やカタログが頭に入ってきやすかったです。

Martin Fowlerというと小難しい文章を書く人なのかなという先入観があったのですが、平易な文章で時にはジョークも混ぜて解りやすく書いてあったため理解しやすかったです。

感想

リファクタリングを行う大前提として対象コードにテストが書いてあることが条件としてあります。テストがあるからこそ小さなステップで動作を確認しながら変更を行うことができます。テストを書くことの重要性を再度認識しました。

また、リファクタリングはただコードを綺麗にしたり、エンジニアリング実践をするためのものではなく、結果として機能追加やデバッグを速くする経済的なものであると著者は言っています。 当たり前ですが、ソフトウェアというものは一度作成したら完成というものではなく、常に変化するものです。その変化を容易にする手段としてリファクタリングが重要になってくるのだと思います。最初から完璧なコードを書くことは不可能なので、いかに小さなステップでイテレートして改善していくかが大事なのではないでしょうか。

IDEリファクタリングの機能が搭載されていたり、テストが実行しやすくなったり、昔よりもリファクタリングが行いやすい環境になっていると思います。リファクタリングできそうなコードを見つけたら積極的に行っていきたいです。

最後に

本書の中で出てくるKent Beckのこの言葉が印象的でした。

I’m not a great programmer; I’m just a good programmer with great habits.

ボーイスカウト・ルールを意識しつつ、良い習慣を持つプログラマーになれるよう日々努力していきたいと思いました。

リンク

2019抱負

皆さん新年はいかがお過ごしでしょうか。Perfumeのエレクトロ・ワールド最高でした。お茶の間に、かしゆか曰く「怒号」をファンクラブ会員みんなでとどろかせました。最高のひとときでした。

さて、年の始めなので目標を立ててみました。目標は宣言した方が良いと言うので技術、趣味と分けて記事として書いてみようと思います。

技術

baserCMS 5

まずはbaserCMSのメジャーアップデートを成功に導くことが大きな目標です。ベースとしているCakePHPを2系から3系(もしくは4系)にアップデートするという、かなり大がかりなものとなりますが、コラボレーターとしてプロジェクトに参加させていただいているので頑張っていきたいです。OSSの大規模アップデートにここまで密接に関われる機会は滅多にないと思うので、アップデートを通して良い開発経験を積んでいきたいです。

サイドプロジェクト

個人的に進めているプロジェクトとして、スキルを身につけるためのロードマップ(イメージとしてはこういうやつ)を作成、閲覧できるWebアプリがあります。その開発を少しずつ進めていっています。このWebアプリの公開も今年の目標にしたいと思います。Laravel、Vue.jsを使用しているため、この辺りを周辺技術も含めて身につけたいです。

きまべんで進捗を記録しながら、#100DaysOfCodeというハッシュタグで毎日つぶやいていきます。

最近は勉強のための勉強をしていて、チュートリアル煉獄から抜け出せずに手を動かすことが足りてないなと思っていたので、この開発を通じてモダンな技術をどんどん吸収していきたいです。

趣味

ここ数年、フットサルやらサイクリングやら山登りやら色々手を出しましたが、今年はメインは一本に絞っていこうと思っています。

ギター

練習しては休んでを繰り返して、中途半端な状態がずっと続いていたのですが、友達の音楽サークルに入れてもらえることになり、ギター熱が再燃しました。そちらでのセッションを楽しんでいきたいです。

あとは弾き語り教室に通ってみたいなと思っています。プログラミングはほぼ独学でやってきて、人に何かを習うということを久しくやっていないので、そういうのもいいんじゃないかなと思ったからです。

ギターに関しては今年中に何かしら人前で発表することを目標にしたいです。 まずはBUMP OF CHICKENスノースマイルCDJで聴けた人うらやましい!)を練習中なので、「冬が寒くって 本当に良かった」と感じれる季節のうちに全体を弾けるようになりたいです。

いい年にしたい

f:id:tkykhk:20190313152636j:plain
遠征先の横浜市鶴見の總持寺でひいた大吉おみくじ

Perfumeのカウントダウンライブでこれ以上ない年明けを迎えられたので、最高の年になる気がしています。

去年は色んな方のおかげでいい軌道に乗れた1年でした。 最高を求めて、この道を走り進み進み進み続けていきたいと思います。

グッドバイ2018

2018年も終わりに近づこうとしているので、振り返り記事を書いてみたいと思います。

ちなみに大晦日横浜アリーナで行われるPerfumeのカウントダウンライブに参戦する予定なので非常にそわそわしております。今年はPerfumeのライブはカウントダウンも含めると遠征4公演、福岡3公演参戦しました。正直、自分でも引くレベルですが大好きなのでしょうがありません。

去年の振り返りはどんなことを書いたっけと見てみるとブログをMediumに引っ越したのも2018年初からだったようです。何だか随分昔のことのように思えますが、それだけ密度の濃い1年だったのかもしれません。

イベント

今年はとにかく色々経験させてもらいました。

baserCMS開発合宿

1月にはbaserCMS開発合宿に参加しました。僕が所属しているキャッチアップでは社長がファウンダーであるbaserCMSというオープンソースCMSを利用したお仕事をメインにしているのですが、そのbaserCMSのための開発合宿です。会社や所属を超えて協業できるオープンソースという文化っていいなと実際に顔をつきあわせることで改めて認識できました。田川市にある廃校を利用したいいかねPaletteもいい場所でした(そういや今年はいのしし年ですが、猪バーガーなんてものが提供されています)。

くもキャスト出演

2月にはくもキャストというポッドキャストに出演させていただきました。ホストの@gaaamiiさんとはプログラミング初心者の頃から5年以上の付き合いなのですが、こちらから声をかけて出演させていただきました。英語や福岡について語りました。

kumocast.jp

PHPカンファレンス福岡2018 LT登壇

6月にはPHPカンファレンス福岡2018に参加しました。2018年の目標として何かしらのイベントで登壇するというのを掲げていたのですが、初っ端からけっこうな規模のイベントで登壇することとなりました。とても緊張しましたが、度胸をつけることが出来、いい経験になりました。

tkykhk.hatenablog.com

これに付随して書いたブログ記事がバズったりして、英語が得意であるという武器をこれからも活かしていきたいと思いました。

tkykhk.hatenablog.com

キャッチアップ開発合宿

8月にはキャッチアップの開発合宿を担当者として実行しました。企画とかお金の計算とかめちゃくちゃ苦手なのですが、助けていただきながら成功に導けたので良かったです。

catchup.co.jp

baserCMS開発者ミーティング@島根

11月にはbaserCMSのバージョン5を見据えた島根でのミーティングに参加しました。島根とてもいいところでした。開発に関わりながら旅も一緒にできるなんて最高です。

basercms.net

ざっとカレンダーなどを振り返ってみて印象に残っているイベントは以上です。

勉強

勉強に関しては、『達人プログラマー』の「知識ポートフォリオ」という節の中で、「毎月1冊技術書を読もう」と書かれており、それを目指していました。途中失速して空白期間が出来たりして結果的には達成できませんでしたが、去年の5冊から2倍の10冊は読めました。来年は12冊読めるよう頑張りたいです。

scrapbox.io

あとはいい加減、勉強のための勉強から脱却して、プロジェクトベースで何か作りながら学んでいく方針にしていきたいです。「何を読んだ」、ではなく「何が出来る」を目指したいです。

最後に

とにかく人に助けてもらった一年でした。ダメになりそうな時に引っ張ってもらうことがなければ違う道を歩んでいたと思います。

僕は覚えも悪いし、頭の回転も速い方ではないので、多分技術的に尖ったり、バリバリ超人的に仕事ができる人間にはなれないんじゃないかと思っています(そこを目指してはいますが)。

それでも色んな人が支えてくれて世話をしてくれます。自分で言うのも変ですが、何かしら放っておけない部分があるのかなと思っています。そうやって気にかけてくれる人たちへの感謝を忘れず、関係性を大事にしていきたいです。テクノロジーに関わる人間とはいえ、結局は人と人との繋がりでこの世界は成り立っているのですからね。

2019年はどういう年にしようかとけっこう迷いが生じているのですが、ほぼ日手帳に載っていた言葉で、平野レミさんが良いことを言っていました。

今年の抱負? 今年も去年といっしょでいいの、 ずっといっしょでいい、 毎日一生懸命、生きているから。

達成したいことはたくさんありますが、毎日を頑張って生き、気づいたらたどってきた道に達成したものが並んでいる。2019年はそんな1年にしていきたいと思います。