こんにちは!株式会社リビルドのテツです! 今回は7月13日(土)に台湾の 張榮發 基金 會國際會議中心(Zhang Rongfa Foundation International Conference Center) で行われた LaravelConf Taiwan 2019に参加してきたのでその参加レポートをお届けしたいと思います! 今回は弊社代表の鈴木と、 株式会社CYDAS の小深田さんがセッション枠で発表するということでそちらの模様もお届けします。 Laravel公式サイト LaravelConf Taiwan 2019 Zhang Rongfa Foundation International Conference Center 各セッションの内容を一部お届け! ✨ Abracadabra, Let Me In ✨ Sprinkle some magic to avoid authentication and authorization headaches Auth0のBɛn Dɛkraɪさんによる「Auth0を使って認証と承認の頭痛を避けるために魔法を振りかける」というタイトルの発表でした。 車輪の再発明 をするのをやめようという話から始まりました。Paymentの仕組みはStripe,認証・認可はAuth0, というように既存の仕組みを 再利用していくことで、作り手が ビジネスロジック のみに集中できるようになるとのことでした。また、既存の仕組みがない場合は OSS へ貢献するチャンス!どんどんライブラリを公開していこうという話もありました。Auth0の wordpress プラグイン あるっぽいので、 Wordpress での構築のさいも認証の仕組みでドキドキしなくて済むのはありがたいですよね! GitHub - auth0/wp-auth0: WordPress Plugin for Auth0 また、Auth0 + Wordpress の構築をライブコーディングで実演していたのですがカンファレンス規模の発表でライブコーディングしているのは初めて見たので圧巻でした!今度どこかで組み込むチャンスを作って、Auth0使ってみたくなりました。 いよいよ日本勢の発表! のまえに、同時通訳をしてくださる方との入念な打ち合わせ! 日本勢は日本語での発表ということで、 台湾語 への同時翻訳をスムーズに行うために入念な打ち合わせがおこなわれました! 未経験からの挑戦!Laravelでのプロダクト開発 株式会社サイダスの小深田さんの発表です。プログラム未経験者がチームにいる場合の開発体制について、自分の体験談を踏まえて様々な考察がなされました。経験年数が浅いメンバーが多かったため、モブプログラミングで開発を進めていく体制をとったとのことでした。(モブプログラミングに関しての説明はこちらの記事がおすすめ モブプログラミングを実際にやってみた - Qiita ) 具体的に試してみた案としては、 zoomを繋ぎっぱなしにする レトロスペクティブを毎日する 振り返り(レトロスペクティブ)を毎日していく中で、チーム内のプログラミング初心者の悩みをしっかり汲み取って先輩エンジニアが様々な助言をくれる体制を作った などがありました。モブプログラミングをはじめて良かったことは、チーム内でのコミュニケーションが多くなったこと、レトロスペクティブでしっかり振り返ることでチーム全体が成長できたこと、プログラミング能力がすごい人からどういう思考でコードを書いているのかが学べることなどが挙げられました。 Laravel + Nuxt.js + FirebaseでDXと開発コストを意識したSPA開発 弊社鈴木の発表です。これまでチームマネージャーや、技術選定をする役割を勤めた経験からチーム内のDeveloper Experience(開発者が気持ちよく開発・保守できるかどうかの指標)を上げていくためにどういう取り組みをしたかという内容でした。 具体的には、 今後、市場として注目されそうな技術 インターネット上のドキュメントが充実しているか 沖縄では尖っている技術 開発コストが高すぎず、程よく難易度の高い技術 に絞って技術選定をしてきたということでした。 弊社自社サービスのTadoruの宣伝もしっかりしておりました! カンファレンス終了後、何人か台湾の方もTadoruに登録してくださっていたみたいです。謝謝! Laravel Conf Taiwan 2019のここがすごい! 次に、Laravel Conf Taiwan 2019に参加して、すごっ!と思うことがたくさんあったのでレポートしていきたいと思います。 翻訳がすごい! さまざまな言語圏の方が参加するため、発表中は英語、日本語、 台湾語 で同時通訳が行われておりセッションの内容が全くわからないということはありませんでした リアルタイム翻訳を実現するのに auXala という Webサービス が使われていたですがこれが本当にすごい。品質・操作性ともに満足のいくものだったので、今までのように1つ何万もするインカムを会場で配布するようなことはしなくてよくなりましたね!みなさんも是非利用してみてください! 弁当がすごい! 勉強不足で料理の名前が全然わからなかったのですが、とにかく豪華なお弁当!!特に写真右下の骨付きチキンはスパイシーな香りがしてとても美味しかったです! 懇親会がすごい! カンファレンスの後は懇親会!懇親会を3行でまとめると 瓶ビールうますぎ ご飯うますぎ 遊び心満載 ご飯を食べたあとは、スポンサーの会社さんの名前や技術の名前などを使ったビンゴ大会が行われました! また、ビンゴゲームの後にはクイズ大会も!( 台湾語 でほとんどわからなかったので勘で答えました笑) ビンゴゲームの実装楽しそうだなと思ったので、どこかで使う予定があれば実装してみたい...!( Twitter で@kaoru6stringsまでDMください!) 最後はみんなで マリオカート !懇親会めっちゃ楽しかったです! おわりに とにかく最高の雰囲気のカンファレンスでした!カンファレンス参加者への配慮や、おもてなしのレベルがすごく高く大変勉強になりました。 最後に、Laravel Conf Taiwan 2019のスタッフの皆様、 Fontech 方客特 の皆様、Laravel Conf Taiwan2019の 参加の機会を与えてくださった全ての皆様に感謝! 本当にありがとうございました! 台湾すごくいい国だったので、みなさんも是非台湾へ! セッションの内容は、後日こちらのチャンネルにもアップロードされるとのことなのでこちらも要チェック! LaravelConf Taiwan - YoutubeChannel ところで... みなさん台湾には 臭豆腐 という食べ物があるのをご存知だろうか 匂いはきついが味はうまいというチーズや納豆に似た食べ物なのだが、、 台湾にお越しの際は是非おためしあれ!そして@kaoru6stringsまで感想をきかせてください!笑
phpconfuk2019 株式会社リビルドの嘉数です! 2019/6/29(土)に福岡の FFBホール で開催された PHPカンファレンス 福岡2019に一般参加枠で参加してきたので、それについて書いていきたいと思います。 こちらイベント公式サイトです。 PHPカンファレンス福岡2019 ちなみに去年開催された PHPカンファレンス 福岡2018にも参加しており、そのときは一般枠ではなく5分のLT枠で参加して登壇してきました。 当時のことについてまとめた記事がこちらになります。 「PHPカンファレンス福岡2018」にLT枠で登壇しました - 株式会社Re:Build いやホント一年経つのが早いこと。 各セッションの感想 今回は PHPカンファレンス 福岡2018のときと違い、FusicホールとHASIGOホールで各セッションが行われ、 ロリポップ !ホールでハンズオンを行うようになっていました。 ハンズオンでは与えられたコードの 脆弱性 になる箇所を見つけて直す早さを競うものや、行数の多いコードを如何に削減できるかを競うものがありました。 どちらも興味はあったのですがハンズオンしてしまうと確実にセッションを見に行く時間がなくなってしまうので渋々諦めました、また機会があれば参加してみたいところです 。 「 PHP 型検査・夢と理想」 うさみけんたさん( @tadsan )によるプレゼン。 PHP7のタイプヒンティングだけでなく、PHPDocやPSR-5の型を活用する方がより厳密に出来るとのこと。 以下のようなことができるらしい、なるほど便利ね。 PHPDocの型注釈ではユニオン型( Hoge|Fuga )や配列要素の型付け( int[] )ができる PSR-5では array<string> や ArrayObject<Hoge> のように指定できる あとPhpStorm使ってるとPHPDocの自動生成も出来るし、生成したDocを元に静的解析もしてくれるので非常に楽ちん。 様々な解析ツールがあるけど、基本的に開発ではPhpStormを使い、CIではPHPStanを使うという具合でよさそう。 スライドはうさみさんのページからどうぞ。 「PHP型検査・夢と理想と現実」 #phpconfuk|tadsan|pixivFANBOX 「3ヶ月で20万行を消すためにやったこと」 メルカリのnaoprさん( @naopr )によるプレゼン。 メルカリの API をマイクロサービス化していく中で、呼び出されていない・使われることのない API を削除していったというお話。 不要コードを削除することで、以下のメリットがあるのだとか。 コードの複雑度の低下(循環的複雑度、 トランザクション の複雑度の低下) システムの高速化(レスポンスタイム、CIの実行時間の短縮になる) レスポンスタイムの短縮はどの程度変わるかわからないけど、CIの実行時間の短縮については納得。 使われていない API のテストをしたところで、使われてないのだからその分の時間が無駄になるだけよね。 スライドはこちら。 「Monitoring PHP 」 清家史郎さん( @seike460 )によるプレゼン。 嘉数は別会場のセッションを見ていたため直接このセッションを見たわけではありませんが、おかしょいさん(@okashoi)が Twitter で綺麗にまとめてたのでそれを掲載します。 この Tweet にぶら下がる形でセッション内容について書いてあるので、参考までにどうぞ。 次はせいけしろーさんの 「Monitoring PHP 」を聞きに行きます。 #phpconfuk #hall_ha — おかしょい@アーキテクト 兼 技術広報 (@okashoi) June 29, 2019 スライドはこちら。 Monitoring PHP 「子育てと スキルアップ を両立するエンジニアの 生存戦略 」 株式会社Fusicの岡嵜雄平さん( @Y_uuu )によるプレゼン。 時間が足りなくなることで様々な問題が起きる、それを踏まえて時間のないエンジニアの 生存戦略 を考えようといった話。 子育てをしていない自分ですら時間が足りないな〜と思うときがあるのに、ママさんパパさんエンジニアはそれ以上に時間がないのだなと考えさせられた。 なんとなく スマホ を開いたり、なんとなくゲームをやったりなど、そういった時間が無駄になりかねない行為は今後控えて時間を大切にしようと思う。 スライドはこちら。 「古き良き開発現場に新しい文化を作ろう!〜荒野を耕し、種を撒き、水を与え続ける話〜」 松村那子( @nako0123 )さんによるプレゼン。 開発現場に新しい文化を持ち込むために奮闘したというお話。 社内の誰がどんな役割を持っているのか把握し、セルフプロモーションを行い社内で自分の声が通りやすくなるように動き、出来ることからコツコツと進めていくという非常に戦略的なやり方。 現場で開発をしながら、環境を改善するためにここまで動けるというのは凄いと思った。 スライドはこちら。 「 ユニットテスト の現場の問題を原則に立ち返って考える」 BASE株式会社の東口和暉さん( @hgsgtk )によるプレゼン。 ユニットテスト の現場の問題に対してどういった戦略があり、それぞれの戦略がどのようなメリット・デメリットをもたらすかを評価するための考え方についてのお話。 冒頭だけ聞くと難しすぎやろと思っていたが、話がすごく分かりやすかったのでチョット理解できた。 これまではただなんとなくテストを書いていたけど、この辺の意識を持って挑むべきだなー。 ユニットテスト によるコスト削減 > ユニットテスト の作成・維持コスト スライドはこちら。 「Laravel でやってみるクリーン アーキテクチャ 」 株式会社ウィルゲートの岡田正平さんことおかしょいさん( @okashoi )によるプレゼン。 「重要なもの」を「些細なもの」に依存させない、という考え方をサンプルコードを例に説明してくれた。 その中で依存関係逆転について話をしていたが、依存の方向(bar -> foo)を逆転(foo -> bar)したとしても処理の方向(foo -> bar)が変わらなければfooはbarに依存していることになるんじゃないかな?とか思ったりもした。 ここで言う依存ってのが単にどこでimportしてるかって話なら理解できる。 クリーン アーキテクチャ について詳しく知らなかったが、おかしょいさんの話を聞いて興味を持った。 プレゼンの中で紹介されていた書籍買おうと思って Amazon 見てみたけど、 Kindle 版は3600円くらい、一方で単行本は6500円という強気の価格。 勉強のために買うか...。 スライドはこちら。 Laravel でやってみるクリーンアーキテクチャ #phpconfuk from Shohei Okada 「PHPStanでCustomRuleを作る」 BASE株式会社の川島慧さん( @nazonohito51 )によるプレゼン。 またもやBASEだ!アクティブな人が多いな〜、良いことだ。 レビューで「ここスネークケースにナッテルヨ, キャメルケースにナオスヨロシ」というのは手間もかかるし毎度それを相手に伝えるのも申し訳なさもある。 そんなあなたにPHPStan、CI上で静的解析してレビューイにルール違反を気づかせてあげよう。 弊社のプロジェクトでもPHPStanは使ってるけど、PHPDocで独自のタグを作りそれを元に検査できるというのは初めて知った。 今の所使う機会はないので、今後必要が出てきたら真似をしてみたいところ。 スライドはこちら。 おわりに PHPカンファレンス 福岡に二度目の参加、相変わらず勉強になりました モチベーションも上がるし、良いことしかありませんね。 今回は嘉数は聴講枠でしたが、次回はプレゼンターとして参加できればいいなと思っています。 運営の皆様、素晴らしいイベントの企画・運営をしてくれてありがとうございました! 告知 2019年10月12日に PHPカンファレンス 沖縄を開催する予定で、嘉数もカンファレンスの実行委員として動いています。 実行委員数人で分担して作業を行っているのですが、カンファレンスの準備って大変なんだなと実感しています(特に実行委員長が半端なく忙しそう)。 PHPカンファレンス 福岡のように良いカンファレンスを提供できるよう頑張りますので、多くの方に参加していただければ嬉しいです。 それとCFPの募集が既に始まっており、応募期限は2019年7月31日となっていますので、こちらの方も奮ってご応募ください😃 PHPカンファレンス沖縄2019
株式会社リビルドの谷田です! 5/22(木)に恵比寿で開催されたLaravel Meetup Tokyo Vol.12に参加してきました。 沖縄に移住してから一年となりますが、移住以来初の東京でした。 さすが大都会、とにかく人が多いのです!そして歩くのがはやい! そんな中、久しぶりの人混みにおろおろしながらいざ恵比寿へ。 laravel-meetup-tokyo.connpass.com 参加動機 Laravelに携わるようになってから、早半年。 右も左も分からずひたすら目の前のことをこなす日々でした。 そんな学びの毎日ですが、まだまだ知らないこと 分からないこと、また気づけていない良さもあるに違いないとおもいました。 そこで今回は興味の幅を広げることを目的に参加することにしました。 会場 アライドアーキテクツ様でした。 www.aainc.co.jp 弊社開発組織は "One Team, One Goal" というスローガンを掲げ、職種や国籍、働く場所に関わらず、プロジェクトに参画する全員が1つのチームとなり共通のゴールに向かう環境を構築しています。 オフショアなどの言葉を多く耳にするなか、 国を超えて1つのチームとして働いているだなんて素敵ですね。 Laravel Meetup Tokyo Vol.12 あまり大きな勉強会に参加したことがなかったためすごく緊張しつつ会場入り。 ずらーっと並べられたたくさんの椅子をみて圧倒されてしまいました。 しかし、こんなにものたくさんの方々がLaravelへの想いを募らせ 集まっているのかと思うととても心強くおもいます!! 会場提供企業様含め9名の方が登壇されていました。 Eloquentへお別れ、パッケージのお話、Laravel+Slack通知での共同開発 エラーログの出し方、Auth0を使ってみたお話などありとあらゆる分野での 発表が繰り広げられました。 くまもんエンジニアさんの「Laravel+Slack通知で実践したリアルタイムエラー共有開発」 のお話では、開発のためのLaravelでの実装を発表されており、とても興味深かったです。 開発する環境にさえもLaravelを使用することができるんですね。 以下、現在アップロードされている分のスライドになります。 Eloquentに別れを告げるタイミングについて考えた speakerdeck.com Laravel Novaの適切な使い方を考えてみる speakerdeck.com Laravel+Slack通知で実践したリアルタイムエラー共有開発 speakerdeck.com LaravelでAuth0を使って ECサイト を実装してみた speakerdeck.com エラー時にログに出力する情報と画面に表示する情報を分ける エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo from Shohei Okada www.slideshare.net おわりに はじめてのおつかいレベルにどきどきだったも束の間、発表に夢中に・・ 社外の方のお話を聞く機会があまりなかったので とても貴重な時間となりました! 気軽に参加することもでき、 運営の方々発表された方々には本当に感謝です。 積極的に勉強会に参加していきたいとおもいます! 告知 2019年10月12日(土) PHPカンファレンス 沖縄開催決定 初心者の方からも上級者のまで、お気軽にご参加ください! phpcon.okinawa.jp
株式会社リビルドの嘉数( @kkznch )です! 2019/05/17(金)に宮崎で開催されたWebナイト宮崎にLT枠で参加してきました。 今回のWebナイト宮崎のサブタイトルは「てげFirebase学びたい」ということで発表者全員がFirebaseに関する内容、発表者数はなんと10人、宮崎恐るべし。 以下はイベント詳細ページになります。 Webナイト宮崎 Vol.4 ~てげFirebase学びたい~ - connpass ちなみに前日の5/16(木)にはLaravel Meetup Miyazakiに参加してきました。そのときの記事はこちら。 「Laravel Meetup Miyazaki」でLTしてきました 宮崎の フリーランス 集団 てげほげ は結構な頻度で勉強会を開催してくれますね、良い環境だ。 各LTについて 決して面倒くさいというわけではないですが、少し数が多いので一部だけピックアップして紹介します。 Firebase入門 弊社カンボによるFirebase知らない人向けのプレゼン。 毎度初心者向けに説明してくれる内容がわかりやすくてよいなと思う。 そして残念ながらスライドが公開されていない模様。 公開され次第こちらに反映します。 Firebase初心者が2日でwebチャットアプリを作ってみた 宮崎エンジニアの山元彰也さんによるプレゼン。 Firebaseにある18の製品をもとに、 チュートリアル に沿ってFirebaseでチャットアプリを作ったというお話。 以下はスライドになります。 Firebase初心者がwebチャットアプリを作ってみた from SHOYAYAMAMOTO プレゼンも良かったのですが、それ以上に山本さんが書いてくれたというQiitaの記事がとても丁寧に解説されています。 記事中のプルダウンメニューの中身が半端ない。 Firebaseの理解のためにGoogle Developers Codelabsのチュートリアルをやってみた。 - Qiita Firebase AuthをNuxt + Rails の自前サービスに導入してみた てげほげの澤井友恵さんによるプレゼン。 自分で作っているサービスにFirebase AuthとNuxtと Rails 使ってごにょごにょするという、タイトル通りの内容。 そしてFirebaseから発行されるJWTの検証を自前で実装するとは、さすがともえ兄貴や。 スライドはこちら。 Firebase Authを Nuxt + Railsの自前サービス に導入してみた from Tomoe Sawai ついでにゆるすけのリンクも置いちゃう。 みんな!登録して使うんだ! ゆるすけ -ゆるいスケジュール共有サービス- Cloud Functions for Firebaseで定期実行ができるようになったよ! てげほげの稲本章吾さんによるプレゼン。 Cloud Functionsをの定期実行を使用して、自宅寝室のカーテンを自動で開くというまさかのIoTな内容。 思ってたよりも原始的な開き方だったので会場の皆が笑っていた、あれは面白い。 スライドはこちら。 白基調に水色のスライドってシンプルで可愛いな。 Firestore のデータ設計について アル株式会社の小川航佑さんによるプレゼン。 Firestoreでデータを保持する際、どういったデータ構造がベターか、というお話。 リレーション的なものはサブコレクションと、ルートコレクションとそれぞれ持つようにして、効率よくデータの取得できるようにする方がよさそう。 パフォーマンス測定してないから実際にどの程度の違いがあるのかは分からないけど、データ量が増えるだけで大して手間もかからないので特に問題はないはず。 スライドはこちら。 Firestoreのルール設定 割と何でも出来てビビる はいどうも、トリの嘉数です。 確か前回もトリだったような気がする、最後はいい感じに終わらせないといけないという謎のプレッシャーを感じる。 内容はFirestoreのルール設定に関する基本的な話。 ざっくりとしか書いてないので、詳しく知りたい人はFirestoreの公式ドキュメント見てね。 スライドはこちら。 おわりに まずは二日連続で宮崎で登壇させてもらったことに感謝、宮崎の皆さまいつも本当にありがとうございます。 勉強会で発表されている内容もレベル高いし、宮崎に訪れるたびにかなり学びを得ています。 Webナイト宮崎や他の勉強会がまた開催されるのであれば参加させて頂きたいと思いますので、今後もどうか宜しくおねがいします。 最後に、てげほげのミッチーさんの写真がいい感じだったので公開。特に意味はない(笑)。 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。
株式会社リビルドの嘉数( @kkznch )です! 2019/05/16(木)に宮崎で開催されたLaravel Meetup MiyazakiにLT枠で参加してきました。 二度目の宮崎!暑すぎ寒すぎず、夜に屋外で飲むビールが美味しい気温感でした。 以下はイベント詳細ページになります。 Laravel Meetup Miyazaki - connpass 会場が「&samble Kitchen」という場所で、普段はコワーキングカフェとして営業してるらしい。販売されているタピオカミルク ティー が美味しかった。 各LTについて 「Laravel入門」 弊社のカンボさん(@kanbo0605)によるプレゼン。 カンボさんはLaravelの概要や基本的な機能、タマネギ構造についてわかりやすく説明してくれました。 スライドがまだ公開されていないようなので、公開されたらこちらにも掲載します。 「初心者からのLaravelの基本の「き」」 しんげんさん(@memetra)の会社、 合同会社 ノマド リで インターン をしている宮本さんのプレゼン。 なんと今回が人生初のLTとのこと。緊張しているようでしたが、しっかりとしたプレゼンが出来ていました。 宮本さんはコーディング規約やRequestクラスを用いてリファクタする方法や、あとはEroquentのload/withメソッドについてお話していました。 スライドまだが公開されていないようなので、公開されたらこちらに掲載します。 いやしかし、 インターン を始めて数ヶ月でこのレベルの内容が話せていることが素晴らしい。 しんげんさんが凄く丁寧に指導なさっているんだなと感じとれました。 「駆け出しエンジニアのコードをレビューしてみた」 合同会社 ノマド リ代表であるしんげんさん(@memetra)によるプレゼン。 しんげんさんはLaravel初心者がやりがちな書き方を紹介した上で、どこをどう書く方が良いのか、Laravelのどの機能を使って実現する方が良いのか、などを実際にレビューをする前とした後とで比較しつつ丁寧に解説していただきました。 嘉数もLaravel歴一年の駆け出しエンジニア(?)のため、かなり参考になりました。 「LaraCSVで手軽に CSV を出力する」 こちら嘉数のプレゼンになります。 LaraCSVというライブラリを使って CSV を簡単に出力させる方法や、他のライブラリとの比較についてお話させていただきました。 他ライブラリとの比較では使い心地と CSV 出力するまでの速度をざっくり測ってみたのですが、ちょっと測定方法ミスってたかもしれん...。 「データベースのデータをLaravelのSeederに逆再生」 はい、再び弊社のカンボさんによるプレゼンです。 Laravelで マイグレーション ファイルを作り、そこからSeederを使ってマスタデータやテストデータなどを準備する、この作業って割と怠いですよね。 そこで、以下のライブラリを使ってSeederを自動生成することで手間を省くことができる、といったお話でした。 GitHub - orangehill/iseed: Laravel 5 Inverse Seed Generator 生成されるSeederはFactoryなどは使われずにSeederにデータが直書きされるらしく、カンボさんがお見せしてくれたSeederには24万行ものコードが記述されていました。 若干イケてないような気もしますが、手動で生成して無駄に時間食うよりはよいのかも...。 「LaravelプロジェクトでStripe決済を実装してみた」 フリーランス エンジニアのともえさんによるプレゼン。 LaravelでStripeを用いた サブスクリプション の実装を行う方法や、テストでStripeをモック化するための方法について、デモを交えながら説明をされていました。 スライドがまだ公開されていないようなので、公開されたらこちらにも掲載します。 毎度テストのたびにStripeの API が叩かれるのも面倒なので、今回のともえさんのStripeモックのお話はかなり参考になりました。 ともえさん「Stripeするぞ!」 おわりに 宮崎、ただ一点不満があるとすれば沖縄から宮崎への直行便の航空費が高すぎること...。 那覇 ↔宮崎が LCC で繋がれば宮崎へ行く頻度を上げたいところですが、いつになるのやら。 写真は勉強会会場に隣接している「 宮崎フェニックスブルーイング 」。フルーティな香りのビールがだいぶ美味しかった。 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。
株式会社リビルドの嘉数( @kkznch )です! 2019/02/21(木)に福岡で開催された#0 Fukuoka.Firebase@LTイベントにLT枠で参加してきました。 福岡でFirebaseの知見を共有することを目的として開催された本イベント、今回が第0回目(初回?)とのこと。 以下はイベント詳細ページになります。 #0 Fukuoka.Firebase@LTイベント - connpass 二週間前は大阪で、一週間前は東京でとイベントに登壇するための出張が続いておりますが、今回も休む間もなく福岡グルメツアーもとい福岡出張でございます。 福岡は何度か来ているのですが、やはり他の県に比べてかなりアクセスが良いなと感じます。 滞在期間中は仕事をしつつ、美味しいご飯を食べて至福の時を過ごせました、ありがとうございます福岡。 各LTについて 「自社サービス チャット機能にFirebaseが導入されてた」 こちら嘉数のプレゼンになります。 自前で作るチャット機能の作り方、Firebaseで作るチャット機能の作り方についてそれぞれ大まかにお話させていただきました。 バックエンドもフロントエンドも含めて全て自前で作るとリアルタイム更新処理を実装するのにめっちゃ手間かかるんですよね。 ポーリングだとフロントエンド側の処理が複雑になるし挙動も怪しいし(これは嘉数の実力不足)、WebSocketだとWebサーバと別でサーバ立ててフロントから接続するような仕組みを作らないといけない。 これに対して、Firebaseを使えばバックエンドの処理とリアルタイム更新処理はFirebaseに丸投げ、開発者はフロントでFirebaseに接続してよしなに処理するだけで済むという、かなり楽に機能を実装することができます。 「AuthからはじめるFirebaseの第一歩 」 株式会社ソントレーゾ の益田さんによるプレゼンです。 Firebase SDK AuthenticationやFirebaseUI AuthといったFirebaseが提供する認証機能についてお話をされていました。 FirebaseUI AuthがUIも含めて認証機能を提供してくれるとのことで、非常に便利だなと感じました。 しかしバックエンドだけでなくフロントエンドの仕事も尽く Google先生 に奪われているような気がしてならない。 「JSでFirebaseのML Kitを使う」 株式会社Fusic の吉野さんによるプレゼンです。 Firebaseが提供するML Kit( 機械学習 キット)をNativeScriptと組み合わせて使ってみたというお話をされていました。 AWS にも Amazon Rekognitionという画像認識サービスがあるのですが、それよりもシンプルにコードがまとまっている気がします。 文字認識、顔認識の実演が面白かった。 「Firebase アプリ開発 のテストについて考えてみる」 株式会社Fusic の浦田さんによるプレゼンです。 Firebaseで アプリ開発 をする際にどのようにテストを行う方が良いか、どうやってテストを行うのかについてお話をされていました。 Slides ローカル環境にFirebaseの エミュレータ を構築してオフラインでテストを行えるというのは初めて知りました。 弊社ではCIでテストを回しているため基本的にオンラインで行われるのですが、手元で確認したい際などは非常に有用だなと感じました。 環境も結構簡単に作れそうだし良さそう。 おわりに Fukuoka.Firebase 初回のイベントということでどれくらいのレベル感なのか、どんな人が来るのかも分からず参加させていただきましたが、参加できて本当に良かったです。 各LTの内容もそうですが、懇親会で様々な方とお話してかなり勉強になりました。 本イベントは今後も継続して行っていくということで、次回も参加できればいいなと思っています。 また、懇親会の際に沖縄のGCPUBというグループが主催している GCP 関連のイベントも紹介していただいたので、機会を作ってそちらのイベントにも顔を出したいなと思います。 今回のイベントでも様々な人と交流して繋がることができ、とても有意義な時間を過ごすことができました。 イベントを運営してくれたコミュニティの皆様、突然の参加宣言をしたのにも関わらずLT枠で参加させていただき本当にありがとうございました。 今後もイベントが開催された際は参加するだけでなく、何かしら協力できたらいいなと思いますので、気軽に声をかけてくれればなと思います。 ※余談ですが、以前に PHPカンファレンス 福岡2018で嘉数がLT枠で登壇したことを覚えていてくれている人がいたのでとても嬉しかったです、ありがとうございました。 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。
こんにちは!リビルドの中西です。日曜日のゆったりとした時間を 羽田空港 のおしゃれなラウンジで堪能しております。みなさまいかがお過ごしでしょうか? 今回は2019年2月17日(土)に東京のグランパークカンファレンスで行われたLaravel JP Conference 2019に参加してきましたのでレポートをお届けします! conference2019.laravel.jp 参加の動機 弊社 PHP でメインで利用している フレームワーク がLaravelということもありまして、スポンサーやらせていただきました。さらなる社内の技術向上を目的に参加させていただきました。 弊社リビルドもロゴ乗ってる!ありがとうございます🙇♂️ https://t.co/vZfTh8JgiA — TETSU (@kaoru6strings) 2019年2月15日 各セッションの感想 ServiceProvider, ServiceContainer 入門 これまでで一番わかりやすいServiceProvider, ServiceContainerの解説でした! 僕も以前まではコントローラの中で new CsvService() とかしてサービスクラス使っていました。今後は、 CSV 入出力・メール送信などの汎用性の高い処理はサービスクラスにまとめてServiceProviderに登録して利用するのがよさそう。 speakerdeck.com laravelでパッケージ開発 これまでcomposer経由でインストールされるLaravelのパッケージはなんか怖い感じがしたのですが、サービスプロバイダーの理解が進めば怖がらずに使えそうな感じがしました。 パッケージ化のメリットは以下のような感じ いきなり独立した リポジトリ として管理しなくても、composerで ディレクト リを指定して自作のパッケージをインストールできるので日々の業務の中でもパッケージ化にトライすることができる うまく行けばマイクロサービス的に切り離せばいいし、上手くいかないときは今までどおり単一のプロジェクトとして管理すればよい という感じでした。 speakerdeck.com Laravelでの API 開発を爆速にするためにやっていること 実際に色々なTryをした結果、どうすればうまくいったのか知見の共有をしてくださった感じでした! 開発のスピードを上げたいから人数を増やせばいいというものではない まずは現状のメンバーで個々のパフォーマンスをいかにあげるかどうかがポイント そのためにはDX(Developer eXperience: 開発者の開発に対する満足度のこと)をあげることが重要 こういう知見の共有は現場の人間としてはとてもありがたいですよね。僕も日々の業務で感じた事系のアウトプット増やしていきます! slides.com Laravelのデプロイ戦略。 VPS からDocker、Kubernates、サーバレスまで 個人的にインフラ周りで悩んでいるので大本命のセッションでした! ポイントは以下のような感じでした。 すぐにDockerやEC2のオートスケーリングを導入する必要はないが、どういう技術でどういう種類があるのかくらいは抑えておく必要がある とくにオートスケーリングの設計は早めに考えておかないと新規のサービスなどはアクセスが増えたときにかなり焦る(というかサービスがとまる) Docker運用するなら、ローカルに保存しているデータは外部に保存するよう実装を変える必要がある ログとか本番環境の稼働状況など、どんどん 見える化 していくのは後々障害が発生したときに強い味方になると思うので個人的にもどんどん勉強していこうと思いました。 speakerdeck.com Laravelで学ぶ、 ウェブアプリケーション チューニングの基本 セッションの冒頭でチューニングは職人芸じゃなく、理詰めで誰でもできるものなんですよという言葉がすごく印象的でした。 ポイントとしては以下の感じでした! チューニングは職人芸じゃない やることがわかれば怖くない 「遅い」はとても曖昧な言葉 「弊社のWebサイト遅くね?」と言われたらその「遅い」がなぜなのか、原因をつきとめるところからスタートするべし チューニング難しそうなイメージがあったのですが、理詰めでいけば怖くないとわかったのが良かったです! speakerdeck.com 新卒2年目がLaravelコントリビュート出来た理由とその面白さ 初学者の方に有用な情報が盛りだくさんなすごいいいセッションでした! 俺もLaravelコントリビューターになりたい!まずはLaravelのコードを読んで、改善できそうな部分をIssueをたててディスカッションするところからということだったのでがんばります! docs.google.com 個人的な今後の目標 今回のカンファレンスに参加させていただいて、個人的な課題がいくつかみつかりました。 Laravelのログ設計や、サーバーログの 見える化 ができるように頑張る いざというときに備えたインフラ設計を考える 自動デプロイがスムーズに設計できるようになる Laravelコントリビューターになる 大好きなLaravelを安定稼働させるためのインフラ構築に興味が湧いた中西なのでした。というわけで、 AWS + Laravelでなにかサービス作ってみようと思います。 目標はサーバー代くらいは稼げるサービスをつくる。実運用するとログの設計方針とかも見えてくると思うので。 さいごに Laravel JP Conference 運営のみなさま、スピーカーのみなさま、学び多き最高に楽しい時間を本当にありがとうございました!
株式会社リビルドの嘉数です! 2019/01/25(金)に大阪で開催された【大阪】Laravel LTというイベントに参加し、弊社の鈴木と嘉数とでLTをしてきました。 宮崎に続き、初の大阪! 今回は日程の都合上あまりゆっくりできませんでしたが、現地の方が勧めてくれたお店でたこ焼きとミックスジュースを美味しくいただくことができたので良かったです。 以下はイベント詳細ページになります。 【大阪】Laravel LT 2019/01/25 - connpass LT! 発表者は4人で、それぞれがLaravelに関する話しを繰り広げました。 プレゼン毎の質問タイムが毎回盛り上がっていた気がします、さすが大阪や...! 「Laravelで簡単にSPA Webアプリ 作成!JWT認証導入」 最初の発表は弊社の鈴木が行いました。 自社サービスにJWT認証使っているので、その際の導入手順や動作例などについて話されていました。 プレゼン後には2019年10月に PHPカンファレンス を沖縄で開催するという告知付き、ぬかりなし。 「Collection使ってますか?」 株式会社Nextat 代表取締役 の西澤さんによるプレゼン。 普段なんとなく使っているCollection、実は Illuminate/Support/Collection と Illuminate/Database/Eroquent/Collection の二種類あるって知ってました? 西澤さんはそれらの違いや使い方などについて話されていました。 「Laravel Telescopeが便利そうな気がする」 こちら嘉数のプレゼンになります。 Laravel5.7.7から追加されたLaravel Telescopeについてお話しました。 皆すでに知ってるだろうなぁと思い発表したのですが、意外に知っている人がおらず、発表後に色んな方からすごく便利そうな機能だねーとお声をいただきました。 自分が作った機能ではないですが少しうれしかったです笑。 「 LaravelでGraphQLやってみた」 合同会社ピクセルグラム 代表の上平さんによるプレゼン。 最近から弊社でもGraphQLやってみたいという話しがあったので、とてもタ イムリ ーな内容でした。 エンドポイントを集約し、且つフロントからクエリを叩いているかのようにデータの取得ができる今風な書き方に感動しました。 GraphQL用に用意されたLaravelのツールも便利よのう。 おわりに 今回初めて大阪に行ったのですが、イベント中に関わってくれた方々が皆とてもいい人達ばかりでした。 Twitter のDMで美味しい飲食店一覧を送ってくれる方もいたし、イベントの帰りに改札まで送り届けれくれた方もいました。 不慣れな土地だと不安しかないので、こういった形で助けてくれるのは本当にありがたいです、感謝! また、本イベントを通してエンジニア友達もたくさんできました。 沖縄も含めた地方の勉強会やイベントって大体来る人が決まってくるので、今回のように旅先で普段関わることがないような人達と知り合って繋がりを持てることが凄く嬉しいです。 大阪に来て本当に良かった、ありがとうございました! 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。
株式会社リビルドの嘉数です! 2019/01/30(水)にITプロパートナーズさんと弊社(株式会社リビルド)で「【Nuxt.js/Vue.js】スタートアップ企業導入事例」というイベントを開催しました。 イベントでは嘉数も登壇し、Nuxt.jsの導入を検討している方やNuxt.jsを導入したばかりの方、またはそもそもJS フレームワーク 選定に困っている方向けに、スタートアップ企業として実際にNuxt.jsを導入してサービスの開発・運用をしているという話をしました。 以下はイベント詳細ページになります。 【Nuxt.js/Vue.js】スタートアップ企業導入事例 - connpass こちらは Tweet まとめ。 【Nuxt.js/Vue.js】スタートアップ企業導入事例 まとめ - Togetter それでは、各セッションについてざっくりと書いていきたいと思います。 「SPA開発未経験者によるNuxt.jsを使った自社サービス開発」 トップバッターは嘉数です。 イベント前日までプレゼンの練習をほとんど行っていない状態だったため、登壇して話し始めるまでは内心かなり不安でした。 しかし実際喋ってみると、時間の都合上早口で話したのですが、特に問題なくプレゼンすることができたかな思っています(主観ですが...)。 プレゼンの内容としては、Nuxt.jsを選定した理由だとか、実際にNuxt.jsで開発をしてどうだ\ったかなどについてお話しました。 こちら当日に使用したスライドになります。 「TABETEのフロントエンドをNuxt.jsでリプレイスする話」 コークッキングの榊原さんによるプレゼンです。 コークッキングさんは現在 TABETE という、廃棄の危機にある食事を手軽にレスキューするというWebプラットフォームを展開しています。 TABETEは元々は Rails オンリーで構築されたシステムだったのですが、改修にあたりフロントエンドでNuxt.jsを使うことにしたのだとか。 今回はその歳に躓いたところや、そもそも導入したきっかけは何かについて話されていました。 スライドがまだアップロードされてないので、され次第こちらにリンクを貼りますm( )m 「Nuxt.jsでプロダクトを開発して得た知見」 ITプロパートナーズの米川さんによるプレゼンです。 ITプロパートナーズさんもサービス開発にNuxt.jsを導入しており、その際にどういったメリット・デメリットがあったか、どういった工夫をしたかなどについて話されていました。 いくつか弊社の内容と被っていたところもありましたが(すいません...)、それはそれでNuxt.jsを使って得られる感触が大体同じものなんだなと感じました。 スライドがまだアップロードされてないので、され次第こちらにリンクを貼りますm( )m 「Vueと共に走ったフロントエンドリプレイス1年間 」 スタディ ストの小宮山さんによるプレゼンです。 1年かかったUIリニューアルプロジェクトから得たVueの知見として、便利だった機能、危険だった機能など実体験から得た教訓について話されていました。 まずスライドのボリュームに驚きました笑。 時間内に全ての内容を話してもらうことはできませんでしたが、スライドに丁寧に説明など書かれているので後でじっくり読みたいと思います。 おわりに 本イベントの参加を募る際に定員60名として募集をかけていたのですが、なんと100名以上の方から応募がありました。 フロントエンドの フレームワーク としてNuxt.jsは注目されているのだなぁと改めて実感しました。 また、会場に来てくれた方々ともお話をしてみて、各セッションで話された内容とは異なるNuxt.jsの知見なども得ることができました。 書籍やサイトから情報を収集することは出来ますが、こういったイベントに参加して実際に人と話しをすることで得られる情報もあるし、それが醍醐味でもあるなと思っています。 イベントに参加・登壇して頂いた方々、会場を提供して頂いたITプロパートナーズ様、皆さんの協力のおかげで今回このような素敵なイベントが開催できたなと思っています、本当にありがとうございました! 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。
目次 1.移住までの経緯 2.沖縄でエンジニアをやるメリット 3.移住して良かったこと この記事は 沖縄 Advent Calendar 2018 - Adventar の24日目の記事です。 株式会社リビルドの鈴木です! 東京で約4年間エンジニアをやった後に沖縄で半年間、 フリーランス をやった後に沖縄に起業するにあたって、 感じたことを書いていきます。 1.移住までの経緯 元々、自分の性格的に人とは違う道を行きたいというのが、昔からありました。 理由としては、おそらく、自分の中では苗字が一般的な苗字(鈴木)だったり、 3人兄弟だったり、自分の存在が薄れていると感じる瞬間があり、他の人より目立ちたいだったり、 普通とは違う道に行きたがる傾向があったのかなと思っています。 常に自分が生きているという実感が欲しくてがむしゃらに突っ走ってた感じです!笑 その中で自分が生きている内に自分が生きた証を残したいという想いが芽生え、 大学4年生くらいから起業を視野に入れて活動してきました。 また、私の出身は神奈川県なのですが、地方が好きでよく旅行に行ってました。 その中でビジネスマンとしても成長し続ける且つ、 自分の好きな地方でバリバリ働ける道を模索していました。 正社員で会社に所属している期間中にも自分の住んでみたい地方(島根、福岡など)に何泊か泊まってみたりなどして、 いろいろと自分の人生を今後、どうしていくか考えてました。 ただ、在職中には具体的な道筋が決まりきらなかったので、一旦、 フリーランス エンジニアになって、 リモートワークしながら、自分の住む地域を探すことにしました。 思い切って、会社を辞めた後は、リモートワークしながら、自分の住んでみたいと思った候補地を回りました。 例えば、長野、高知、福岡、京都など各地に短期間で滞在してました。そんな中で最後に行ったのが沖縄でした! 沖縄にはちょうど、 ギークハウス沖縄 ができるタイミングで、迷わず、入居しました! 2.沖縄でエンジニアをやるメリット 沖縄でエンジニアをやって良いと思ったことをざっと、上げていきます! ギーク ハウス沖縄(シェアハウス)がある! ギーク ハウスとは、主にエンジニアや プログラマー を職種とする人や、Webが好きな人などが共に住むコンセプト型シェアハウスです。共通する趣味を持った人たちが価値観を共有し合い暮らしています。エンジニアなどが多いことから住民同士でプログラミングを教え合ったり、一緒に仕事をすることもあります。現在約30戸の ギーク ハウスが存在します。これらは個人で運営されていたいり企業が運営したりと様々な形態で運営されています。 blog.geekhouse.okinawa 最初は私も ギーク ハウスに1年くらい住んでおり、そこで沖縄のエンジニア友達であったり、 多くのIT系のコミュニティを紹介して頂きました! 沖縄に知り合いがいなかった自分にとっては、本当に感謝しきれないです。 勉強会・コミュニティが多い 沖縄にはたくさん勉強会があり、他の地方と比べても多い方だと思います! 詳しくはこちらをご覧ください。 mint.hateblo.jp 私自身も沖縄で複数の勉強会を主催したりもしています! 参考としては下記です! laravel-meetup-okinawa.connpass.com www.itcokinawa.jp 県外の方も旅行するついでに勉強会に登壇してくれることがある! 他の地方と比べるとIT企業が多い! こういった沖縄専用のIT転職サイトもあったりします! www.itcokinawa.jp 3.移住して良かったこと 年中温かい! ランニング好きの自分にとっては、冬でも温かいのは、とても嬉しいです! あとは自分が寒がりで、 ベトナム に2週間くらい滞在してたことがあったのですが、 ベトナム くらいの気温が自分に合ってました(笑) 沖縄料理が美味しい! これは元々、自分が沖縄料理が好きだったのもありますが、 特にステーキがめちゃくちゃ美味いです! 海が綺麗 江ノ島 の海を見て、育った自分からすると最初、見たときは衝撃でした!笑 まとめ 上記の点から、他の地方も見た上で、エンジニアとして移住するのは良さそうと思い、沖縄に移住しました! 沖縄で起業した決め手としては、また別の点があるので、別の機会にでも記事を書ければと思います。
株式会社リビルドの嘉数です! 12/13(木)に宮崎で開催されたWebナイト宮崎 Vol.2に参加してきました。 イベントで沖縄から東京に行くことはよくあるのですが、今回は沖縄から宮崎、しかも嘉数にとっては初の宮崎ということで不安と期待が高まります。 以下はイベント詳細ページになります。 Webナイト宮崎 Vol.2 ~てげ○○やってみた~ ※11/21参加枠15名→30名に増加 - connpass 今回嘉数はイベントのゲスト枠でLTを行いました。 イベント直前に参加表明したので、ゲストとして無理やりねじ込んでもらった感があります。スタッフの皆様に感謝...。 Webナイト宮崎 Vol.2に参加した理由 そもそも何 故宮 崎の本イベントに参加したのかというと、弊社の自社サービスの開発メンバーとして宮崎の方々に加わってもらっているため、その顔合わせも兼ねてイベント参加+宮崎旅行をしてきました。 普段のミーティングではビデオ通話を用いて会話をするのですが、直接顔を合わせて話すことも大事ということで今回宮崎に伺った次第です。 Webナイト宮崎 Vol.2について 宮崎のWeb系 フリーランス 集団「てげほげ」が主催するイベントで、今回が第二回の開催となります。 技術・知識を共有する場や機会が少ないということが地方あるあるだと思うのですが、そういった場や機会を設けるために「てげほげ」というグループが作られたとのこと(うろ覚え)。 実際イベントには40人以上の人が訪れていたので、非常に需要があるのだなと感じました。 本イベントの今回のテーマは「はじめて○○やってみた」ということで、アプリを作ってみた話、ヒートマップで売上をアップする話、 ペアプロ の話など、様々な内容のLTが繰り広げられました。 全体的にレベルが高くて面白かったのですが、その中でも星占いアプリを作ってみたという話が個人的には印象に残っています。 そして嘉数はいつもどおりBDDについての発表を繰り広げてきました。 BDDの発表するのはいいのですが、そろそろ自分でBDDしてる写真を使わないといけない気もしています。来年の夏あたりに弊社のメンバーで撮りに行くか...。 おわりに 初の宮崎は最高でした。 宮崎に飛行機到着後はてげほげスタッフ(弊社のサービス開発メンバー)が車で迎えてくれるし、会場でスタッフにトイレの場所を聞いたらトイレの入り口まで エス コートしてくれるという高待遇っぷり。 LTも全部面白かったし嘉数もゲストとしてLTさせてもらうしと、本当に至れり尽くせりでした。 そしてイベント後の懇親会では、出された料理全てが美味しかった。 特に鶏肉、味も食感も普段食べているものとは全く違うと分かるほど美味しかったです。また鶏刺しと叩きが食べたい。 最後になりますが、宮崎に行って本当に良かったなと思っています。 イベントに参加して開発メンバーと顔を合わせるだけのつもりでしたが、現地のエンジニアと交流を持てたり、色々な方の話が聞けたりと自分にとってかなり刺激になりました。 てげほげスタッフの皆さま、有意義な時間をありがとうございました! また宮崎に伺いますので、その際もどうか宜しくおねがいします! 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、 沖縄県 外の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。 また、 沖縄県 外のイベントにも積極的に参加するつもりですので、お声をかけていただければ幸いです。 株式会社Re:Build
株式会社リビルドの嘉数です! 10/18(木)に渋谷で開催されたNuxtMeeutup#5に参加してきました、渋谷です。基本的に嘉数は渋谷にいるときは 楽天 カフェで作業してます。 楽天 ペイで支払うとカフェ半額だし、電源もあるし素晴らしい。 NuxtMeetUp#5(再度枠増加) - connpass はい、NuxtMeetup#5について書いていきたいと思います。 NuxtMeetup#5に参加した理由 かんぼ(社長)「自社サービスはSPAでいこう(突然)」 最近から開発を始めた自社サービス、社長の意向でSPA化することになりました。嘉数は普段はバックエンドの開発をしている人間ですが、フロントエンドにも興味があったため良い機会と思いSPA化に賛成しました。 かんぼ(社長)「SPA化する際はNuxt.jsを使おう」 嘉数「Vue.js+VueRouterでよくないですか?」 かんぼ(社長)「とりあえず流行にのっておけ」 なるほど。嘉数は流行に疎いのですが、流行にのるのは大事だなと思いNuxt.jsを導入することにしました。あと触ったことが無いものを触るのって凄く楽しいですよね。 そんなわけでNuxt.jsを導入する前にある程度どういったものか情報収集することと、Nuxt.jsを使って普段から開発を行っている人たちと関わることを目的にNuxtMeetup#5に参加しました。 NuxtMeetup#5について connpassのNuxtMeetup#5募集ページを見ると、参加枠の人数が160人に達していることが分かります。非常に多い。嘉数もインフラ系のイベントにはよく参加するのですが、そういったイベンドでは多くてもせいぜい30人程度でした。フロントエンド界隈の、今回で言えばNuxt.jsの人気具合が伝わりますね。半信半疑だったけどちゃんと流行ってたんだな...。 LTセッションでは、はじめの挨拶とスポンサーLTを含めて合計8人の方が登壇していました。Nuxtがビルドされた際に出力されるバンドルサイズでかすぎる問題、nodeサーバを クラスタ モードにしてマルチスレッドで捌く話、Nuxtのハマりどころ、nuxt- i18n を使って多言語対応したけど SEO 対策するとheadタグの中身が消える話、NuxtでJAMStackな開発をする話など、様々な話題がLTセッションで繰り広げられました。以下は本イベント内で使用された、現在アップロードされている分のスライドになります。 おわりに 今回はNuxtMeetup#5に参加するためだけに当日早朝から東京入りし、翌日の朝に沖縄に帰りました。沖縄・東京間は流石に結構な旅費がかかりましたが、本イベントに参加したことはそれ以上の価値があったなと思います。情報収集も出来たし、何よりNuxt友達が出来たことが嬉しかったです。イベントを運営してくれたスタッフの皆様、有意義な時間を本当にありがとうございました! 広告・告知など 弊社(株式会社リビルド)は 沖縄県 内でLaravel勉強会、JS勉強会など様々なイベントを開催しています。 沖縄県 内にいる方はもちろん、本土の人も沖縄旅行も兼ねてイベントに参加していただけると嬉しいです。
株式会社リビルドの嘉数です! 8/7(火)にランサーズ、BASE、リビルドの三社で「レガシーコード改革!UT/CIで Webサービス の技術的負債を解消する取り組み」というイベントを実施し、リビルド枠として嘉数は「Laravel5.5的 継続的インテグレーション 」というタイトルで登壇させて頂きました。 【好評につき増枠!】レガシーコード改革!UT/CIでWebサービスの技術的負債を解消する取り組み - connpass というわけで各セッションについて非常にざっくりとした感じで書いていきたいと思います! 「決済リプレイスと PHP バージョンアップを支えた ユニットテスト 」 スピーカーはBASE株式会社の東口和暉さん。 ユニットテスト についてお話して頂きました。 テストをしやすくするためにコードを 疎結合 にしてMockを差し込めるようにする、テストしにくい部分は破壊的だがrunkitを使用してコード内部の処理を変更する テストを書く人・書かない人に分かれないよう全員がテストを書きやすい環境を整える 溜まってきたテストの知見を活用して「破綻しやすいテスト」を書いていないか確認する 手探りで何が最適なのかを探しながらテストコードを書いている自分としては、非常に共感が得られる内容でした! 「レジェンドコードと向き合いレガシーからモダンへ変革する」 スピーカーはランサーズ株式会社の 永田真也 さん。ランサーズがこれまで行ってきた開発の歴史、もっと言えばテストの歴史についてお話して頂きました。 アプリ自体は PHP で実装しているが、E2Eテストは RSpec +Capybaraのように 疎結合 に導入できるものを使用した 技術的負債を解決するために多くの失敗を重ねるが、その失敗と向き合い改善を続けて前に進み続ける、徐々にコードを進化させていくことを意識する 起業から11年経った会社のテストに対する取り組みの変化は非常に面白かったです! 弊社の発表!「Laravel5.5的 継続的インテグレーション 」 発表! そしてこちら弊社のプレゼン資料、タイトルで「〜的〜的」と的が連続しているのが気になります。 こちら発表風景になります。 20180807_レガシーコード改革01 20180807_レガシーコード改革02 質疑応答! 弊社の発表後にいくつか質問を頂いたのですが、質問内容が興味深いものでした。以下はその時の質問と回答の内容になります。 Q:「Laravelの PHPUnit でテストを書く際、どこからどこまでが ユニットテスト ・ 結合テスト の範囲なのか?」 A:「現在の開発であれば、 結合テスト には"機能の一連の手続き"と"コントローラ内のアクション"についてのテストを記述している。 ユニットテスト には"他に依存しない独立されたサービスクラス"のテストを記述している。ここらへんの配分って難しい、分かりみ。」 Webアプリだと ユニットテスト と 結合テスト の境目がどこからやねーんってなりますよね。皆も同じように思ってるんだなぁと感動しました(笑)。 Q:「GitLab CIでコンテナを使用してテストをしているようだが、最終的なデプロイ先もコンテナなのか?そうでない場合は冪等性が保証できないが、環境のテストも行っているのか?」 A:「今回はデプロイ先はEC2を想定していたので、コンテナは使用していない。また、環境のテストは行っていない。」 この「環境のテスト」という考えがとても面白いなと思いました。テストをする環境とデプロイ先の環境が全く同じであれば環境のテストは必要ないかもしれませんが、これらの環境が異なる場合は何が異なっていてどういった影響があるかなど確認しておく方が良さそうですね。かなり勉強になりました。 おわりに 今回のイベントでは、テストについて自分だけでなく皆が四苦八苦しながら取り組んでいるのだなと感じました。共感を得られて且つ知見の共有にもなる、とても良いイベントでした。イベントを主催してくれた方々、スタッフの方々、参加してくれた方々、皆さん本当にありがとうございました。そして懇親会のお肉が最高だったことは忘れません、ありがとう。
こんにちは!株式会社Re:Buildの中西です。今回は7/22(土)に 香川県 の情報通信交流館 e-とぴあにて行われたTDD Boot Camp in 香川に参加してきましたのでイベントのレポートをお届けします! agile459.connpass.com 参加の動機 これまでプロジェクトを スクラム 開発で取り組んできましたが、どうにも毎週のコードレビューとテストが ボトルネック になっている気がしていました。 また独学でテストを勉強し、チームメンバー全員でテストコードを書くようにはしているのですが、うまく テスト駆動開発 できていなかったり、テストの書き方の方向性はこれでいいのかなど迷っていました。 そんななか、なんとあの「 テスト駆動開発 」を翻訳された和田卓人さんが来てくださる テスト駆動開発 の勉強会があるということで参加させていただきました! トーク セッション「 テスト駆動開発 質を作り込む」 午前中は和田卓人さんによる講演会でした。 まず印象に残っているのが、 テスト駆動開発 のゴールは「動作するきれいなコード」だという言葉です。ハンマー釘病にかかってしまわないよう、まず最初に目標を設定することはとても大切なことですよね。 参考: IT業界を蝕むハンマー釘病 - Togetter 次に非常に印象に残っているのが、とりあえず動いてる汚いコードを リファクタリング するときにとりまく下記の3つの感情のおはなし。 堕落:「コード動いてるからええやん?」 焦り:「うわああああテスト書く時間ないでござる」 恐怖:「動かなくなったら嫌だから、リファクタできひん。。。」 どれもビジネスでプログラミングをしたことがある人なら感じたことがあるとおもいます。解決法としては、 恐怖:テストコードを書くことによって克服 堕落:怠けようとする弱い自分を倒すことで克服 焦りに関してが問題で、本当に時間がない場合ってのもあるのでしょうが、日をまたぐと自分のコードでも意味がわからなくなったりすることって頻繁にありますよね!?なので最低でもその日のうちで最低限のテストコードくらいは書こいておこうというのがひとまずの解決策でした。 全体を通してすごく話がわかりやすくスライドもシンプルでみやすく、発表の仕方自体も勉強させていただきました。 テスト駆動開発 ハンズオン! 午後はお待ちかねの テスト駆動開発 のハンズオンでした!会場の人とペアになってプログラミングをしていく、いわゆる ペアプログラミング でのハンズオンでした。 ペアプログラミング とは、2人1組になって1つの画面でプログラミングをしていく手法のことで、ドライバー(キーボードを叩いてプログラミングする人)とナビゲーター(設計したりドライバにアド バイス をしたりする人)の役割に分かれて共同で作業を進めていきます。一見開発効率が2分の1になるかのように思えるのですが実際はそうではなく、誤った実装をしそうになったときにペアに指摘してもらえたり、煮詰まったときにドライバーとナビゲーターを交換することで1人で煮詰まらずに作業が進んでいくという感じで、メリットの方が多い作業方法のように感じられました。 各チームある程度作業が進んだところで会場全体でコードレビューの時間に。最初は自分のコードを大勢の方にみられるということで緊張していたのですが、実際やってみるととてもおもしろく、様々な指摘を貰うことでコードがその場でブラッシュアップされていく感じがエキサイティングでした。 他のペアの方のレビューの際も、自分が指摘する側にまわることで良いコードからは刺激をもらいますし、俺だったらこうするけどなと感じた部分に関してはすぐに質問してみるなど、お互いにとってプラスになることがとてもおおい時間だなと感じました。 懇親会! TDDBC in 香川に参加していた約20名くらいで、ホテルの屋上で開催されているビアガーデン会場へ! ものすごいでかい会場にたっくさんの人がおりました!笑 香川県 ってこんなにもビアガーデン文化が広まっているんやなぁと、 沖縄県 民の中西としてはカルチャーショックでした! まとめ テスト駆動開発 は 銀の弾丸 ではない 時間がないときとかは、最低でもその日のうちに最低限のテストをかく癖をつけよう( テスト駆動開発 にこだわる必要はない) 沖縄でTDD勉強会やりたいのでテストコードとか テスト駆動開発 興味ある方いましたらご一報ください 香川は飲み会のシメは カレーうどん これまでテストコードや、 テスト駆動開発 に関する勉強を独学でしかしてこなかった自分にとっては本当にたくさんの学びがある1日になりました! 最後に、和田卓人さん、TDDBC in 香川の運営の方々、重厚で楽しい時間を本当にありがとうございました!
こんにちは!株式会社Re:Buildの中西です。今回は7/14(土)に グランフロント大阪 で行われた PHPカンファレンス 関西2018に参加してきましたのでイベントのレポートをお届けします!公式サイトから「ネコとワタシと PHP in 沖縄」というタイトルでLT枠に応募したところ、発表順1番で採用されましたのでLTもしてきました! 2018.kphpug.jp 各セッションの感想 会場が3会場に分かれており、自分の好きな トーク セッションを聴くスタイルでした。以下は中西が拝聴させていただいたセッションの感想です。 脱!なんちゃってフロントエンド スピーカーの榊原さんの「フロントエンドを PHP でかくのが アンチパターン になるのはすぐそこだ!」という発言が非常に印象的で、実際僕もそうなるのでは?と思わされました。その理由として、 しっかりフロントエンド組めば、Webベースでもネイティブ アプリに見た目や機能が劣らない時代になってきた 実際 PHP でViewを レンダリング するのは非常にコストの高い処理である API を利用してフロントエンドとバックエンドを 疎結合 に保ち、描画する際のエラーをしっかりハンドリングしておけば、 PHP のFatal Errorなどで画面がユーザー表示されないこともなくなる という理由を上げていました。 やはり既存の技術を惰性で使い続けるのではなく、どうすればUXが向上するかを常に考え続けることが非常に重要だとあらためて認識させられました。 将来的にはフロントエンドエンジニアとか、バックエンドエンジニアとか垣根がなくなっていくのではとも思いました。 チャットディーラーの高速開発を支えるLaravel 株式会社 ラク スの主力サービス、「チャットディーラー」をLaravelで開発した際に得られた知見をまとめた感じの発表でした。Laravelのいいところ、気をつけるべきところのまとめが非常にわかりやすかったので、Laravel初学者の方は以下のスライドが参考になると思います。是非ごらんください! CircleCI 2.0 を使い倒そう CircleCI2.0って実際どうなの?という話から、CircleCI 2.0を利用する具体的な方法。また、CIを構築する際に技術的な障壁となってくるDockerを使いこなすためのテクニックまで盛りだくさんな内容でした! 僕も知らなかったのですが、CircleCI2.0は無料枠があるらしいので個人的なプロダクトで今度触ってみようと思います。 DockerHubのイメージのソースをダウンロード、改造して自分のDocker Imageを作成するのが超勉強になるみたいなので近々取り組んでみようと思いました。 LTしましたよ!「ネコとワタシと PHP in 沖縄」 沖縄を代表してLTの発表頑張りました!カンファレンスの参加者が1つの部屋に集結するイベントの運びとなっており、非常に沢山の人の前でLTさせていただきました!緊張したけど会場の反応もあったかく楽しく発表させていただきました! 懇親会! 技術の話からお仕事の話まで、非常にたくさんの方々と交流できました。お話してくださった方々、本当にありがとうございましたー! まとめ はじめて県外遠征での勉強会参加となりましたが、非常に濃い内容の勉強会となりました!1人で参加したので最初はアウェイな感じがありましたが、近くの方と技術の話を通してすぐ仲良くなれたのでそれからは居心地のいい雰囲気で参加させていただきました。やっぱりエンジニアっておもしろい! 最後に、 PHPカンファレンス の運営の方々、スピーカーの方々をはじめ、関わってくださったすべての人に感謝!楽しい時間をありがとうございました! 株式会社リビルドではWebエンジニアを募集しています 弊社ではWebエンジニアを募集しています。ご連絡は下記のコーポレートサイトから! 株式会社ReBuild | ReBuild また、沖縄でネコ駆動リモート開発したいエンジニアの相談も中西が受け付けていますのでお気軽にご相談ください。
こんにちは!Webエンジニャーの中西です。 本日は PHPカンファレンス 関西2018に参加するため大阪に前入りして、現地の コワーキングスペース で仕事してみました。 1. Blue+(ブルータス) bluetas.com 梅田の ヨドバシカメラ の裏手くらいにありました。 今回は2時間30分くらい利用させていただきました! 床に緑の芝生が引いてあり落ち着いた空間に仕上がっておりました。料金を支払えば個室空間を借りれたり、専用のロッカーを借りれたりするみたいなので気に入った方はがっつり契約してみるのもいいかもしれません。 2. オオサカン www.osakan-space.com ほとんどの利用者が月額会員ということで根強いファンが多い印象でした。お互いが気持ちよく作業するためにルールの整備もしっかりされており、通いやすい環境にあれば是非契約してみたいなーと思いました。また、お昼時間にはみんなでご飯を食べる文化があったりと、他の コワーキングスペース にはないいい雰囲気が!この雰囲気がすきな人はすぐ月額会員になっちゃうんだろうな〜。 最後に、作業風景をパシャリ。 まとめ 今回は2件の コワーキングスペース にお邪魔させていただきました! どちらの コワーキングスペース も個性が出ていてビジターとして利用させていただくだけでも非常に勉強になりました! フリーランス やリモートワークの方は、自分のお気に入りの コワーキングスペース を探す旅とかしても面白そうです。 みなさんおすすめの コワーキングスペース があったらコメントで教えてください!それでは!
こんにちは!株式会社Re:Buidの中西です。 今回は先日行われた写真撮影会のオフショットをお届けします! カメラマンはフリーでデザイナーのお仕事をなさっている町田さんに特別に撮影していただきましたー! 町田さん、素敵な写真本当にありがとうございました! 撮影していただいた写真は弊社のコーポレートサイトや求人ページで見ることができます。お楽しみに! それでは!
株式会社リビルドの嘉数です! 先日 PHPカンファレンス 福岡2018に弊社の インターン 生と一緒にLT枠で登壇してきたので、そのことについて徒然と書いていきたいと思います! PHPカンファレンス 福岡とは もともとは PHPカンファレンス 福岡の運営者である市川さん(@cakephper)が Twitter でふとした発言をしたことにより実現したカンファレンスらしいです。ちゃんとその時の Tweet がtogetterにまとめられていました! PHPカンファレンス福岡が開催!? #fukuokaphp - Togetter なるほど、東京で行われていた PHPカンファレンス に参加できずボソッと呟いたことがきっかけだったようですね。影響力でかい。 PHPカンファレンス 福岡は2015年から始まり、毎年続いて2018年今回は第四回目の開催。毎年大体300人近くの参加者が集まるそうです。スポンサーの数も多い感じがしました。 ちなみに今回は前回よりもTシャツのデザインにこだわったそうです。参加者は先着でイベントTシャツが貰えるのですが、嘉数は登壇者枠ということで色違いのTシャツを頂きました。ロゴと色合いが可愛くて良い! 各セッションの感想 会場にはFusicホールと ロリポップ !マネージド クラウド ホールの二箇所あり、嘉数は基本的にFusicホールのセッションに参加していました。なので、Fusicホールのセッションについてざっと感想を述べようと思います。 なお写真については基本的にNGだったので、嘉数と伊藝君の分のみこちらで掲載します。 「何故 PHP なんですか?」 スピーカー:清家四郎(@seike460) スライド: 何故PHPなんですか? PHP に慣れ親しんできた私達にとって PHP の良さというものが当たり前となっているが、 Golang という別の言語に触ってみて改めて PHP の良さを再認識したというお話でした。ちなみに Golang をディスっていたわけではなく、あくまでも良い部分と悪い部分がそれぞれあるよね、といった具合です。 嘉数は単純にLaravel フレームワーク が使いやすいからという理由で PHP を使ってます。言語仕様うんぬんもそうですが、案件やその時の状況など様々な要因が絡んでその言語を使う理由も変わると思うので、効率よく目的が達成できるのであれば PHP に限らず触ってみたいですね。 「ログの設計してますか?PSR3とログ設計の話」 スピーカー:富所 亮(@hanhan1978) スライド: ログの設計してますか?PSR3とログ設計の話 PHP のロギングライブラリの共通インターフェースであるPSR-3に準拠してログ設計をし、その出力を活用することでより幸せになれるかもしれないとお話でした。 var_dumpでのprint デバッグ が許されるのは小学生までだよね〜、とか言いつつ嘉数は今でも無意識に使ってしまいます。ログ出力する必要はないけど値を確認したい箇所とか、ついつい書いてしまいます。そこはデバッガ使うべきですね、わかります(嘘)。 「Fusic n本の矢 〜生きた 集合知 の作り方〜」 スピーカー:毛利 啓太(@ktam1219) スライド: Fusic n本の矢 ~生きた集合知の作り方~ 個人の知識、個人の知識を蓄えた皆の知識、皆の知識が関連しあって出来る 集合知 、生きた 集合知 、生き生きとした 集合知 。知識の段階とそこまでに至った過程について非常に興味深い内容でした。 弊社の現状は個人の知識がそれぞれ散らばっている状態なので、知識を共有できる場所を作ってそれを活用していきたいですね。 「未経験からの挑戦!超速ネイティブ アプリ開発 」 スピーカー:株式会社ハシゴ 松本 拓也(@skycat_me) スライド: 未経験からの挑戦!超速ネイティブアプリ開発 Flutterという Google 製 クロスプラットフォーム を用いて iPhone と Android のアプリを高速で開発できるらしいです。 個人的にはプラットフォームに合わせたネイティブな言語を使って開発をする方が好きなのですが、時間や資源が制限されるのであれば開発時に使ってもいいかなと思いました。 「SOLIDの原則ってどんなふうに使うの?オープン・クローズドの原則編 拡大版」 スピーカー:後藤 秀宣(@hidenorigoto) スライド: SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則編(拡大版)〜 「クラスは拡張に対して開いていて、修正に対して閉じていなければならない」というオープン・クローズドの原則に則って書くコードに感動しました。バリエーションの追加があったとしても既存のコードには手を付けず、新しくコードを追加するだけで対応できるという美しさ、これは確実に抑えておくべきですね。 「 ロリポップ !マネージド クラウド を支えるコンテナ技術のすべて」 スピーカー: GMOペパボ 株式会社 近藤 宇智朗(@udzura) スライド: ロリポップ!マネージドクラウドを支えるコンテナ技術のすべて 普段意識せず使っているコンテナの技術に関するお話でした。ローカルだとDockerコンテナを起動し続けて無駄にリソース消費していますが、マネージド クラウド を提供してる側はリソースが無駄にならないように様々な努力をしているのだなと感じました。コンテナは今では開発には欠かせない技術なので、コンテナの仕組みについて勉強もしてみたいですね。 「0から始めるLaravel相談会」 スピーカー:坂本剛彦(@sakamoto03) スライド: 0から始めるLaravel相談会 Laravelを使えば初級者でも簡単に開発ができるのか?ということについて考えるお話でした。定義されていた初級者のスペックが何気に高い気がしましたが、基本的にLaravel公式のガイドにさえ従えばある程度のレベルのコードが書けるらしいです。 嘉数も最初の頃はLaravel公式ガイドにお世話になりましたが、いつしか途中から読まなくなった記憶があります。一度は全体に目を通す方が良さそうです。 「Laravel Queue でスケーラブルなバッチシステムの構築」 スピーカー:後藤知宏 スライド: PHPカンファレンス福岡で Laravel Queue に関する登壇をしてきました LaravelのQueueとJobを使ったバッチシステムについてのお話でした。話を聞くまではcronを使えばどうにでもなるだろうと思っていたのですが、QueueとJobの使い方や使い所について説明を聞いてかなり勉強になりました。おそらく今後いつか使う機会が出てくると思うので、その時に活かしたいです。 「Testing Live!!!」 スピーカー:フクダリナ(@ rina ) スライド: Testing Live!!! 単体テスト や 結合テスト の話かと思いきや、テスターがテスト対象のサイトをブラウザで開いて目視で行うテストのお話でした。しかもライブ・コーディングならぬライブ・テスティング。実際に存在するサイトをプレゼン中にテストするという稀に見る内容でした。 「ランサーズバージョンアップ報告」 スピーカー:金澤 裕毅(@yakitori009)、小林沙綾(@sayanet) スライド: ランサーズ開発ランチ(Lunchers#5)〜PHPカンファレンス福岡2018予行練習編〜 ランサーズで使われているシステムの PHP とCakeのバージョンをリアルタイムにバージョンアップ完了させた報告と思いきや、現在奮闘しているというお話でした。システムが稼働している環境の PHP のバージョンを5系から7系に上げるとどのような影響があるのだろうか検討がつきませんね。話の後半に出てきたMailDevコンテナは開発の時に使えそうですね。 LTセッション 嘉数とリビルド インターン 生を含めて合計9人がLTを行いました。プロファイラを使って不要なコードを削減したら99%のコードが消え去った話、エンジニアにとっての選択肢の良し悪しについて真面目な話、歌って踊れるアイドルエンジニアによるDappsの話、社内SEが VBA を捨てて PHP で幸せになると思いきや VBA ではなく職を捨てていた話など、話者とその内容が濃すぎるものばかりでした。色んな意味でレベルが高かったです。 弊社のLT!! 緊張しすぎて自分の番が回ってくるまで吐きそうでした。多分変な顔をしていた気がします、写真に撮っておけばよかった。というわけで以下は嘉数と伊藝君のプレゼン内容になります。 嘉数「 PHP 歴3か月だけど沖縄でフルリモート開発してる話」 スピーカー:嘉数 侑起(@kkznch) スライド: PHP歴3か月だけど沖縄でフルリモート開発してる話 嘉数は、 PHP の経験が浅いけど沖縄でフルリモート開発をしていることについて話をしました。といってもLT枠で時間がないので、雰囲気だけ伝わればいいかなぐらいの内容です。LT後の懇親会では「ビーチ駆動開発やってみたい」という声があったので発表した甲斐がありました。 こちら発表風景になります。会場に100人以上はいたかな、かなり緊張しました。 伊藝( インターン 生)「いつか技術を身につけたらLTする!じゃなくて今やる。」 スピーカー:伊藝 秀(@si_date) スライド:(まだアップロードされてないっぽい〜) 弊社 インターン 生の伊藝君はLT駆動開発についての話をしました。確かに、よく分からないけどLT発表に申し込んで、LT発表のために技術の勉強をする方が効率が良いしモチベーション維持にも繋がる気はします。発表もハキハキとしていたし結構ウケていたので良かったです。おつかれさま! おわりに 今回 PHPカンファレンス 福岡2018に参加してみて、様々な知見を吸収することができた気がします。また嘉数自身、これほどの規模の舞台でLTをすることが初めてだったため、かなり良い経験が積めました。楽しかったなと、この一言に尽きます。 PHPカンファレンス 福岡2018の運営の皆様、こんなに素敵なイベントを企画・運営していただき本当にありがとうございました!
下記のリンクを参考にEloquentのリレーションにhasManyThroughを設定しましょう Laravelのリレーション hasManyThrough の使い方を毎回間違うのでメモ // ユーザーモデル class User extends Model { public function Games() { return $this- > hasManyThrough(①, ②, ③, ④, ⑤, ⑥); // ← 毎回忘れる } } 番号 user_id ① リレーションを経由したあとに取得したいモデル (Model\Game) ② リレーション用のモデル (Model\UserGame) ③ ②のモデルを呼び出し元のモデル (Model\User) と結びつけるために使うキー (user_id) ④ ①のマスタID (game_master_id) ⑤ 不明 ⑥ ②のモデルを①のモデルと結びつけるために使うキー (game_id)
※本記事は嘉数の個人ブログ( Gitlab CI/CDでLaravelプロジェクトのテスト及びデプロイをする - けけずんセルフハッキング )からの転載になります 概要 LaravelプロジェクトをGitlabにPushした際、Pushしたブランチに応じて自動でテストやデプロイを行うようにする。ついでに、テストが通らなかったブランチはメインのブランチに対するマージリク エス トを行えないようにする。 ブランチ毎に行う処理 master :テスト、本番環境へのデプロイ deploy :テスト、ステージング環境へのデプロイ 上記以外のブランチ:テスト 処理の流れ 以下はPushからデプロイまでの処理の流れ図。 LocalからGitlabにPushする GitlabCIが実行される Unitテスト用のDockerコンテナが起動される Unitテストが実行される デプロイ用のDockerコンテナが起動される Envoyコマンドが実行される デプロイ先(本番環境orステージング環境)でPullされる 実装手順 結構やること多い。やることを列挙しとく。 ローカルでやること Gitlabからデプロイ先に接続するための鍵組の作成 Dockerの準備 Dockerfileの作成 Dockerfileをビルドしてイメージを作成 DockerイメージをGitlab Container Registryに登録 Gitlab-CI設定ファイルの作成 デプロイ用タ スクラン ナー設定ファイルの作成 デプロイ先(本番環境orステージング環境)でやること デプロイ用ユーザの作成と設定 GitlabからClone・Pullするための鍵組の作成 リポジトリ のCloneと設定 Gitlabからデプロイ先に接続するための鍵の設置 Gitlabでやること GitlabからClone・Pullするための鍵を登録 Gitlabからデプロイ先に接続するための鍵の登録 ブランチをProtected branch化 こんな感じでやっていく。 ローカルでやること Gitlabからデプロイ先に接続するための鍵組の作成 ローカルの任意の場所(以下 /path/to/mykeys とする)で以下のコマンドを実行し、Gitlabからデプロイ先へ接続を行うための鍵組を作成する。 $ cd /path/to/mykeys $ ssh-keygen -t ecdsa -b 521 -f gitlab-deploy-key -C "deploy-key@gitlab.com" (色々聞かれるので全てEnter) 暗号スイートはECDSAを指定、鍵長は521bitを指定、コメントは任意のコメントを入力する。以下のコマンドで鍵組( 秘密鍵 、公開鍵)が作成されたことを確認する。 $ ls -l /path/to/mykeys gitlab-deploy-key gitlab-deploy-key.pub これ失くしたらヤバイので、紛失しないようにちゃんと管理すること。 Dockerの準備 Gitlab-CI実行時に起動されるDocekrの準備をする。Dockerイメージの登録先として、Gitlabに mydocker という リポジトリ を作成しておくこと。 Dockerfileの作成 ローカルの任意の場所(以下 /path/to/mydocker とする)で以下のコマンドを実行し、 Dockerfile ファイルを作成する。 $ touch /path/to/mydocker/Dockerfile 上記で作成したファイルに以下の内容を記述する。 FROM centos:7 MAINTAINER myname <myname@my_email_address> RUN echo "include_only=.jp" >>/etc/yum/pluginconf.d/fastestmirror.conf && \ rpm --import http://ftp.riken.jp/Linux/centos/RPM-GPG-KEY-CentOS-7 && \ rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7 && \ rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi RUN yum -y install epel-release && \ yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \ yum-config-manager --enable remi-php72 && \ yum -y update RUN yum -y install wget git unzip RUN yum -y install php php-mbstring php-pdo php-mysqlnd php-dom php-posix RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN composer global require "laravel/envoy=~1.0" 今回の Dockerfile はLaravelプロジェクトとEnvoyコマンドが動く最低限の環境を構築するための内容になっている。他に必要なものがあれば上記のファイルに適宜追加してね。 Dockerfileをビルドしてイメージを作成 作成した Dockerfile から以下のコマンドでDockerイメージを作成する。 $ cd /path/to/mydocker $ docker build -t registry.gitlab.com/[Gitlabアカウント名]/mydocker . -t オプションには作成するイメージ名を指定してる。ビルドに少し時間かかるかも(3〜5分くらい)。 DockerイメージをGitlab Container Registryに登録 GitlabにDockerイメージを登録するために以下のコマンドでGitlabにログインする。 $ docker login registry.gitlab.com (Gitlabアカウント名、パスワードの入力を要求される) ログイン後、以下のコマンドでDockerイメージを登録する。 $ docker push registry.gitlab.com/[Gitlabアカウント名]/mydocker ここでも少し時間がかかる(3〜5分くらい)。特にエラーがなければ正常に登録されているはず。 なお、Gitlab公式ページではLaravelプロジェクト直下に Dockerfile を作成してビルドしたDockerイメージをLaravelプロジェクトのGitlabリモー トリポジ トリに登録しているが、今回はDocker用にGitlabリモー トリポジ トリに作成してそこに登録している。こうすることで、他のプロジェクトでもDockerを利用することが出来る(こういう使い方していいのか分からんけど)。 Gitlab-CI設定ファイルの作成 Gitlab-CIではGitlab-CI設定ファイル .gitlab-ci.yml に記述された内容に沿ってCIが実行される。以下のコマンドでLaravelプロジェクト直下(以下 /path/to/myapp とする)に .gitlab-ci.yml ファイルを作成する。 $ touch /path/to/myapp/.gitlab-ci.yml 上記で作成したファイルに以下の内容を記述する。 image : registry.gitlab.com/[Gitlabアカウント名]/mydocker stages : - test - deploy test_pupunit : stage : test services : - mysql:latest variables : DB_HOST : mysql DB_USERNAME : root MYSQL_DATABASE : homestead MYSQL_ROOT_PASSWORD : secret script : - cp .env.example .env - composer install - php artisan key:generate - php artisan migrate - vendor/bin/phpunit .shared_hidden_key : &before_deploy before_script : - 'type ssh-agent || yum -y install openssh-clients' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY" ) - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >~/.ssh/config' deploy_stg : stage : deploy <<: *before_deploy script : - ~/.composer/vendor/bin/envoy run deploy_stg environment : name : staging url : [ ステージング環境で公開してるURL ] when : on_success only : - develop deploy_prd : stage : deploy <<: *before_deploy script : - ~/.composer/vendor/bin/envoy run deploy_prd environment : name : production url : [ 本番環境で公開してるURL ] when : manual only : - master image 項目では先ほどGitlabに登録したDockerイメージを参照してあげる。あとはテストの項目、デプロイの項目が順に記述されている感じ。あとデプロイ先毎に同じ内容の処理を記述するのがダサい感じがしたので、 .shared_hidden_key: &before_deploy の項目に処理をまとめて記述しておいて、各デプロイ先の処理部( deploy_stg , deploy_prd )に <<: *before_deploy を記述しておく。これでなんとなくスマートな感じがする。 .gitlab-ci.yml がローカル リポジトリ に存在する状態でGitlabにPushするとGitlab-CIが実行されるようになる。しかし今の段階ではちゃんと動かないので、本ブログの手順を全て終えてから最後にPushしてね。 デプロイ用タ スクラン ナー設定ファイルの作成 Gitlab-CIから呼び出されるデプロイ用タ スクラン ナー設定ファイル Envoy.blade.php を /path/to/myapp 直下に作成する。 $ touch /path/to/myapp/Envoy.blade.php 上記で作成したファイルに以下の内容を記述する。 @servers(['stg-host' = > 'deployer@[ステージング環境のIPアドレス]', 'prd-host' = > 'deployer@[本番環境のIPアドレス]']) @setup $app_dir = '/var/www/myapp' @endsetup @story('deploy_stg', ['on' = > 'stg-host']) pull_repository run_composer run_artisan run_npm @endstory @story('deploy_prd', ['on' = > 'prd-host']) pull_repository run_composer run_artisan run_npm @endstory @task('pull_repository') echo 'Pull repository' cd {{ $app_dir }} git pull @endtask @task('run_composer') cd {{ $app_dir }} composer update composer install --no-dev --optimize-autoloader @endtask @task('run_artisan') cd {{ $app_dir }} php artisan down php artisan migrate php artisan cache:clear php artisan config:cache php artisan view:clear php artisan up @endtask @task('run_npm') cd {{ $app_dir }} npm run production @endtask デプロイ先(本番環境orステージング環境)でやること デプロイ先(本番環境、ステージング環境)それぞれにログインして以下の作業を行う。 デプロイ用ユーザの作成と設定 rootユーザで以下のコマンドを実行し、デプロイ用のユーザを作成する。 root$ adduser deployer どうせ公開認証方式でしかログインしないだろうからパスワードの設定しなくてもいいんだけど、念のため設定しておく。 root$ passwd deployer (任意のパスワードを入力) deployerユーザが /var/www 下で リポジトリ をClone・Pull出来るよう、以下のコマンドで権限を与える。 /var/www がない場合は作成すること。 root$ setfacl -R -m u:deployer:rwx /var/www GitlabからClone・Pullするための鍵組の作成 deployerユーザで以下のコマンドを実行し、GitlabからClone・Pullを行うための鍵組を作成する。 deployer$ mkdir -p ~/.ssh deployer$ chmod 700 ~/.ssh deployer$ ssh-keygen -t ecdsa -b 521 (色々聞かれるので全てEnter) 以下のコマンドで鍵組(それぞれ 秘密鍵 、公開鍵)が作成されたことを確認する。 deployer$ ls -l ~/.ssh id_ecdsa id_ecdsa.pub リポジトリ のCloneと設定 deployerユーザで以下のコマンドを実行し、GitlabからLaravelプロジェクトをCloneする。 deployer$ cd /var/www deployer$ git clone git@gitlab.com:[Gitlabアカウント名]/myapp.git CloneしてきたLaravelプロジェクト下にある storage にのみ書き込み権限を与える。 deployer$ chmod -R 777 /var/www/myapp/storage chmod コマンドで -R オプションつけて777って場所間違えたら大変なことになるので注意。 Gitlabからデプロイ先に接続するための鍵の設置 ここが少しややこしい。手順「ローカルでやること/Gitlabからデプロイ先に接続するための鍵の作成」で作成した鍵のうち 公開鍵 gitlab-deploy-key.pub をデプロイ先に設置する。以下のコマンドを ローカル で実行し、公開鍵を転送する。 $ scp /path/to/mykeys/gitlab-deploy-key.pub deployer@[デプロイ先のIPアドレス]:~/ 公開鍵認証使ってる人は上記のコマンドを実行すると特に何も聞かれずに実行完了するけど、使ってない人はパスワード求められるのでパスワードを入力する。さっき設定したパスワードがここで活きるというね、設定しててよかった(小並感)。 次に以下のコマンドを デプロイ先 で実行し、転送されてきた公開鍵を authorized_keys に記述する。あとは適切なアクセス権を付与することで、Gitlabからデプロイ先へ接続可能な状態になる。最後に、転送されてきた公開鍵を削除するのを忘れずに。 deployer$ cat ~/gitlab-deploy-key.pub >> ~/.ssh/authorized_keys deployer$ chmod 600 ~/.ssh/authorized_keys deployer$ rm ~/gitlab-deploy-key.pub コマンドの実行場所(ローカルとデプロイ先)を間違えないように注意しよう。 Gitlabでやること ここからはブラウザでGitlabのページを開いて作業を行う。ローカルにあるLaravelプロジェクト /path/to/myapp のリモー トリポジ トリはGitlabに作成済みであるとする。 GitlabからClone・Pullするための鍵を登録 ここもややこしい。手順「デプロイ先でやること/GitlabからClone・Pullするための鍵の作成」で作成した鍵のうち 公開鍵 id_ecdsa.pub をGitlabに登録する。以下のコマンドを デプロイ先 で実行し、出力された値をコピーする。 deployer$ cat ~/.ssh/id_ecdsa.pub (なんか出力されるので範囲選択してコピーする) LaravelプロジェクトのGitlabリモー トリポジ トリページから Project > Settings > Repository と辿っていき、 Deploy Keys の項目で登録する鍵のタイトルを任意で入力、それと先ほどコピーした公開鍵の内容をペーストする。以下のような感じ。入力後はAdd keyボタンを押して登録する。 Gitlabからデプロイ先に接続するための鍵の登録 またもやここもややこしい。手順「ローカルでやること/Gitlabからデプロイ先に接続するための鍵の作成」で作成した鍵のうち 秘密鍵 gitlab-deploy-key をGitlabに登録する。以下のコマンドを ローカル で実行し、出力された値をコピーする。 $ cat /path/to/mykeys/gitlab-deploy-key (なんか出力されるので範囲選択してコピーする) LaravelプロジェクトのGitlabリモー トリポジ トリページから Project > Settings > CI/CD と辿っていき、 Secret variables の項目で登録する鍵のタイトルに「 SSH _PRIVATE_KEY 」と入力し(重要!!)、先ほどコピーした 秘密鍵 の内容をペーストする。「Protected」のトグルはよく分からんけどオンにしておく。以下のような感じ。入力後はSave variablesボタンを押して登録する。 鍵のタイトルに「 SSH _PRIVATE_KEY」を入力したのは、手順「ローカルでやること/Gitlab-CI設定ファイルの作成」で作成したGitlab-CI設定ファイル内で 環境変数 として使用するため。鍵のタイトルとGitlab-CI設定ファイルに記述した 環境変数 名は統一すれば何でも良いのだけど、分かりやすいように今回はこのタイトルにした。 特定のブランチをProtected branch化 うおーーーーーそしてこれが最後の手順!Gitlab-CIでテストを実行した後、テストが通ったブランチをメインのブランチにマージしないよう設定する(正確にはマージリク エス トが出来ないようにする、かな?)。 LaravelプロジェクトのGitlabリモー トリポジ トリページから、 Project > Settings > Repository と辿っていき、 Protected Branches の項目でProtected branch化したいブランチを選択する。おそらく本番環境で使用するmasterブランチはデフォルトでProtected branchになってるので、今回はステージング環境で使用するdevelopブランチ辺りをProtected branch化する。以下のような感じ。 Gitlab-CI実行 ここまで長い工程をお疲れ様でした。最後に、ローカルからLaravelプロジェクト /path/to/myapp をPushし、Gitlab-CIが実行されるか確認しよう。このとき、本番環境にデプロイするならmasterブランチ、ステージング環境にデプロイするならdevelopブランチでPushする。最初に説明したが、developブランチはPushすると自動でデプロイされるが、masterブランチはPushしても自動でデプロイはされない。masterブランチをデプロイする際はLaravelプロジェクトのGitlabリモー トリポジ トリページからテストが通っていることを確認し、手動でデプロイすること。 $ cd /path/to/myapp $ git push -u origin master 感想 主にGitlab公式ページを参考に作業を行ったが、実際に手を動かして理解できた。作業自体も時間がかかったが、この記事を書くのにも時間かかった...。自分のための記録として、また他の人の参考として、本記事が役に立つと嬉しい。間違い等があれば指摘おなしゃす、 参考 Test and deploy Laravel applications with GitLab CI/CD and Envoy - GitLab Documentation