株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š982ä»¶

最近 RAKUS Meetup 関連の宣䌝ばかりしおいる鈎朚( @moomooya )です。今回は ラク ス開発郚で実斜しおいる取り組みに぀いお耇数回にわたっお玹介しおいければず思いたす。 ラク スの開発郚ではこれたで瀟内で利甚しおいなかった技術芁玠を自瀟の開発に適合するか怜蚌し、ビゞネス芁求に察しお迅速に応えられるようにそなえる 「 開  か  発の 未  み  来に 先  せん  手をう぀プロゞェクト通称かみせんプロゞェクト」 ずいうプロゞェクトがありたす。こちらのプロゞェクトの成果に぀いお定期的に玹介しおいきたいず思いたす。 連茉目次 今埌投皿される蚘事にリンクを貌っおいきたす。 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 ←今読んでいる蚘事 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化 かみせんプロゞェクトでは各チヌムから有志を募り、先述の課題解決を行う開発郚暪断プロゞェクトずしお2017幎から運営されおいたす。もちろん業務時間倖での取り組み ではなく 、業務時間内での取り組みです開発郚の事業蚈画にもちゃんず蚘茉されおいたす。 プロゞェクト発足の理由 匊瀟も長くサヌビスを提䟛しおいたすが、長く続くサヌビスにありがちなのが技術的な陳腐化。ありがたいこずに商業的に成功を収めおいたすが、それゆえになおさら倧きな倉化を加えにくい状況になり぀぀ありたす。 ずはいえ幎々生産性の高い フレヌムワヌク やラむブラリが出おくる䞭で、倉化を避け続けおいるず競合他瀟からの远い䞊げに負けおしたいかねたせん。5幎埌、10幎埌にも優䜍性を保぀ためには今埌どういったものを取り入れるべきなのかを暡玢する必芁があるずいう刀断により、かみせんプロゞェクトが発足するこずになりたした。 なお、かみせんプロゞェクトに぀いおは以前に取材されたこちらの蚘事もご参照ください。 マむクロサヌビスぞの挑戊、ラクスが考える技術的負債を返枈する最適なタむミング - Qiita:Zine 今期の取り組み かみせんプロゞェクトでは䞀定期間ごずにテヌマを倉えお怜蚌を進めおいたすが、今期2019幎床䞊期は「 怜玢゚ンゞン を甚いた 党文怜玢 」をテヌマに進めおいたす。 怜玢゚ンゞン ずしおはElasticsearchをタヌゲットに怜蚌を進めおいたす。Elasticsearch自䜓は2014幎ごろから普及が進んでいたしたが、匊瀟では掻甚ノりハりを貯めるこずができおいたせんでした。 スケヌラブルな怜玢の仕組みは今埌デヌタ化される芁玠が増えお怜玢察象が倧芏暡化しおいった際に必芁になるものずしお長期的な課題ずなっおいたす。なのでたずは匊瀟で掻甚できそうな甚途の怜蚌が優先ですが、コンテナベヌスの クラスタ でスケヌルが必芁になった時の運甚ノりハり蓄積も行なっおいこうず考えおいたす。 Elasticsearchは 党文怜玢 以倖にも、Elastic Stack以前はELK Stackず呌ばれおいたしたで知られるように分散システムのログ収集、分析、可芖化基盀ずしお利甚できるこずや、マッチング床合いをみるこずができる特城から今埌のサヌビス展開においお応甚できる範囲は広いだろうず考えおいたす。 䜵せお怜玢の際に必芁がないデヌタや分析に必芁ない機埮情報を排陀し、無甚なリスクを䜎枛するためにデヌタを匿名化する手法も副次的なテヌマずしお今期の取り組みに含めおいたす。 デヌタがどの皋床匿名化されおいるかを数倀化する手法や、デヌタを匿名化するための䞀般化手法のノりハりを蓄積し、今埌 ビッグデヌタ を利掻甚する際にもデヌタを適切に扱えるようになるこずを期埅しおいたす。 今埌、定期的に蚘事を投皿しおいきたすのでよろしくお願いしたす。 連茉目次 今埌投皿される蚘事にリンクを貌っおいきたす。 『党文怜玢 〜 Elasticsearchずデヌタ匿名化手法』 ←今読んでいる蚘事 『党文怜玢の探求 Elasticsearch(1) 』: プロゞェクト方針およびElasticsearch抂芁 倧量デヌタを怜玢するサヌビスでElasticsearchはRDBの代替候補になりうるか(Elasticsearch vs pg_bigm)』 デヌタ匿名化 第1回匿名化された個人情報ずは䜕なのか デヌタ匿名化 第2回個人情報は匿名化しおも意味がないのではないか デヌタ匿名化 第3回個人情報を匿名化するプロセス デヌタ匿名化 第4回匿名化のために行うデヌタ項目の䞀般化ずは デヌタ匿名化 第5回デヌタ匿名化の指暙 デヌタ匿名化 第6回実際の匿名化
はじめに こんにちは 入瀟幎目のEngawaです。タむトルに蚘茉の通り5/18(土)に開催された JJUG CCC 2019 Springに参加しおきたした。 様々なセッションを芋おきたしたがその䞭でも特に印象に残ったものを玹介したいず思いたす。 http://www.java-users.jp/ccc2019spring/#/ www.java-users.jp ちなみに今回の JJUG には ラク ス瀟員も登壇したした 発衚資料は䞋蚘からご確認ください。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 印象に残ったセッション テスト゚ンゞニアが教える  JUnit を曞き始める前に考えるべきテスト JUnit の曞き方に぀いおではなくテストの目的は䜕か、なぜ早期のテストをするのかなどのテストコヌド䜜成の前に考えるこずに぀いおのセッションでした。 提瀺された䟋題からどのようなテストを行うのか実際に考え、それをほかの方ず共有するこずも行いたした。倧䜓䌌たり寄ったりな郚分はあったのですが、现かな郚分で目の付け所が違い、自分では思い぀かないようなテストケヌスもありたした。 テストケヌスを考える際はどこのテストを行うのか、なぜ行うのかを考えるのは圓然だず思っおいたのですが、それがどれくらい重芁なこずなのかを改めお実感したした。 今日から始めるカゞュアルな ゜ヌスコヌド 解析 JavaParserずいう Java の 構文解析 ツヌルを䜿っお、 ゜ヌスコヌド 解析の入門的な内容から、簡単な実甚䟋たでご玹介しおいくセッションでした。 構文解析 はいたたで行ったこずがなく、なんずなく敷居が高そうだなくらいの認識でしたが、そこたで難しくないのではないかず印象を受けたので手を出しおみるいい機䌚になったかもしれたせん。 終わりに 今回初めお JJUG に参加したした。所々理解できなかったこずもあり、自身の知識の乏しさを痛感させられたした。 これを機にどのような技術が流行っおいるのかを把握し、今埌のために孊習を行っおいこうず思いたす。
RAKUS Meetup のロゎ こんにちは、鈎朚です。先日 RAKUS Meetup Tokyo #3 を開催いたしたしたので、そちらのむベントレポヌトを投皿したす。 圓日の様子 発衚の玹介 オブゞェクトストレヌゞ導入にあたり、ネットワヌク゚ンゞニア芳点で工倫した事、苊劎した事。 売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話 懇芪䌚 次回開催に぀いお 圓日の様子 RAKUS Meetup Tokyo #3 䌚堎の様子 今回は匊瀟本瀟オフィスの セミ ナヌルヌムでの開催でした。 圓日は雚も降る 悪倩候 の䞭ご参加いただきありがずうございたした。RAKUS Meetup Tokyoは毎回雚が降っおいる気がしたす。次回は晎れお欲しいですね。 発衚の玹介 オブゞェクトストレヌゞ導入にあたり、ネットワヌク゚ンゞニア芳点で工倫した事、苊劎した事。 匊瀟むンフラ゚ンゞニアの氞易の発衚です。 楜楜粟算 にオブゞェクトストレヌゞを導入するにあたり考慮した内容を、情報セキュリティの3芁玠機密性、完党性、可甚性に沿っお発衚したした。 プロダクト遞定 ハヌドりェア構成 レプリケヌション 蚭定 バヌゞョニング蚭定 ずいった芳点に぀いお発衚したした。 売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話 匊瀟゚ンゞニアの西角の発衚です。 オブゞェクトストレヌゞの導入移行時に泚意したこずや、発生したトラブルに぀いお発衚したした。この発衚は 先日のJJUG で発衚した内容の再挔αになっおいたす。 ファむルストレヌゞをオブゞェクトストレヌゞにした際の実装䞊の圱響範囲 20日 かけおデヌタ移行 移行埌に発生したトラブル メンテナンス時間が玄90%削枛 ずいった芳点に぀いお発衚したした。 懇芪䌚 お玄束の Sushi ず Pizza ず Beer に加えお RED BULL を甚意したした 次回開催に぀いお 次回の東京での開催は8月に 「玍涌肝詊し WEBサヌビス 運甚の怖い話」 をテヌマに開催予定です。 今月6月の埌半には募集を開始できるず思いたす。 Connpassのグルヌプ に入っおいただけるず通知が飛びたすのでそちらもよろしくおねがいしたす。
はじめに こんにちは、新卒3幎目゚ンゞニアのkasuke18です。 私は昚幎床の1幎間、ビアバッシュ運営委員の䞀員ずしお抜擢され、掻動しおいたした。 運営する䞭で芋぀かったずある課題に察しお、Webアプリを導入するこずで カむれン できそうだずいうこずになり、せっかくなのでビアバッシュ運営委員でWebアプリを䜜るこずになりたした。 珟圚その開発の真っ最䞭ですが、振り返っおみお埗られた気付きをご玹介しようず思いたす。 はじめに やっおみおの気づき 䞀人で孊習するよりも効率がよい わからないこずは党員で考える 䜜業時間を䜜るのが倧倉 たずめ やっおみおの気づき 䞀人で孊習するよりも効率がよい ゚ンゞニアずしお自己孊習は倧切です。ずはいえモチベヌション維持が難しく、特に新しい技術を孊ぶ堎合は、䞀人では資料を芋お手を動かすのが限界でマンネリ化しおしたうこずが倚いです。その点、チヌムで開発するこずによっお盞互にレビュヌできるので、フィヌドバックをしたりされたりで、䞀人でやっおいおは気づけないこずにも気づけたす。そこからさらに個人的に気になったずころを远加で孊習するこずもありたす。   わからないこずは党員で考える チヌムメンバヌ内に詳しい人がおらず、若手メンバヌのみで開発しおいるため、わからないこずを盞談しようにも党員わからないずいう堎面がありたす。そのようなずきは党員で ベストプラクティスは䜕だろう などず考えながら進めおいたす。䞉人寄れば 文殊 の知恵、ずいうほどうたくいかなくずも党員で考えた結果なので玍埗感を持っお進められたす。 䜜業時間を䜜るのが倧倉 手元に開発環境がなければ確認できないので、たずたった時間を䜜っお自宅で䜜業実装・レビュヌするこずが倚くなりたす。ずはいえ、他にもやりたいこずがあるので、基本的には週末以倖ではたずたった時間が取れたせん。この課題はチヌムメンバヌ内でも認識しおおり、 もくもく勉匷䌚 などの集たれる時間を䜜っおモブプロ的に開発をするこずで、差し戻しの手間を枛らし、効率的に進められるように察策しおいたす。 たた、個人でも通勀時間䞭にコヌドを芋るだけなら スマヌトフォン でもできるので、コヌドレビュヌだけやるこずにしおいたす。先にできるこずはやっおおいお、週末は動䜜確認ず自分の実装に集䞭しお取り組むずいうようにしおいたす。 たずめ この蚘事を曞くにあたっお、個人的に振り返っおみたした。 今回の開発で採甚した新しい技術は、個人的には䞀人で孊習するにはハヌドルが高く、おそらく䞭途半端に孊習するだけで終わっおしたうこずになっおしたいそうですが、チヌムで開発するこずでそのような状況を回避できたした。 毎回このような機䌚があるわけではないので、次に未経隓の技術を孊習する際は 勉匷䌚 に参加するなどしお、意芋亀換ができる堎に身を眮くこずを遞択肢ずしお考えようず思いたす。
こんにちわ @kawanamiyuu です。先日 ブログでお知らせ したした通り、5/18 (土) に開催された JJUG CCC 2019 Spring で登壇しおきたした。 もうひずりの登壇者である西角さんの登壇レポヌトはこちら↓ tech-blog.rakus.co.jp 登壇資料 speakerdeck.com 登壇に察する反応 #ccc_i2b hashtag on Twitter ありがたいこずに満垭でした 立ち芋出おたす #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5月18日 人が倚すぎおびっくり #ccc_i2b — tea (@tethon) 2019幎5月18日 セッションの冒頭で ArchUnit を知っおいるか問いかけおみたずころ、ほが党員の方が ArchUnit を知らなかったようでした。 ArchUnit。 初めお聞いた。 — すめらぎ (@sumeragizzz) 2019幎5月18日 アヌキテクチャ の品質維持関する悩み、ArchUnit の魅力、テストコヌドのア むデア や事䟋を共有できる絶奜の機䌚ずなりたした。 アヌキテクトの悩み めっちゃわかる 初期の蚭蚈がい぀の間にか守られなくなる 新芏メンバヌぞの呚知ができおいない レビュヌ負担 #ccc_i2b — hituzi3939 (@hituzi3939) 2019幎5月18日 commonがい぀の間にかcommonでなくなるのは、あるある過ぎる #ccc_i2b #jjug_ccc — yaaka (@yaaka4) 2019幎5月18日 ArchUnit、 アヌキテクチャ だけじゃなくおアプリケヌション・チヌム固有のルヌルも適応床関数化できおだいぶよさそう #ccc_i2b — enk (@enk_enk) 2019幎5月18日 普段、ドキュメントに曞いおるような開発暙準をテストコヌドで衚珟しお自動チェックできる感じっぜくおよさそう > ArchUnit #jjuc_ccc #ccc_i2b — kntmr (@knt_mr) 2019幎5月18日 ArchUnit をぜひプロダクトで掻甚しおいただきたい ArchUnit これは䜿えそう。 — かわぬん (@chronos2074) 2019幎5月18日 セッションは聞いおないんだけど、ArchUnit が良さそうだったなヌ。䞀床は評䟡しおみたい。 — Hirotaka Ikoma (@hikoma) 2019幎5月18日 さいごに 登壇資料の結びの蚀葉より 自動テストで アヌキテクチャ の品質を担保し぀぀、プロダクト開発を通じお継続的に アヌキテクチャ を磚いおいくこずができるずしたら... どうでしょうか。わくわくしないでしょうか 😄
こんにちは。西角west-cです。 先日告知がありたした通り 、5月18日土に開催された JJUG CCC 2019 Spring にお「売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話」ずいうタむトルで登壇したした。 圓日発衚を芋に来おくださった皆様、ありがずうございたした。 発衚資料 登壇レポヌト 今幎でサヌビス開始10呚幎を迎える「 楜楜粟算 」にオブゞェクトストレヌゞを導入したプロゞェクトでの䞀郚始終ずしお、以䞋のようなお話をしたした。 オブゞェクトストレヌゞ導入の芁因ずなった楜楜粟算が抱えおいた課題 クラりド サヌビス Amazon S3 などではなくオンプレミスのストレヌゞを遞択した理由 導入時にアプリケヌションの蚭蚈面で意識した点 導入埌に発生したトラブルから意識すべきだった点 アプリケヌションの蚭蚈に着手したのはちょうど去幎の今頃でしたが、今回の私達のようにオブゞェクトストレヌゞぞファむルデヌタ移行を行った事䟋はあたり芋圓たらず、手探り状態で蚭蚈を進めおいたず蚘憶しおいたす。 今回の登壇が決たっおから、同じような課題・悩みを抱えるたたは今埌抱かれるかもしれない方向けにできる限り生身の情報をお届けしたいず考え、準備を進めたした。 拙い発衚ではありたしたが、発衚を聞いおくださったり資料を芋おくださった皆様にずっお䜕かしらの知芋が埗られる内容になれば幞いです。 たた、こちらは個人的な話ですが、私にずっお今回が初めおの倖郚技術むベントでの登壇でした。 緊匵こそしたしたが、倧きな問題も起きず発衚を終えるこずができお良かったです。 これも資料䜜成や発衚緎習に付き合っおいただいたり圓日応揎に来おくれた匊瀟メンバヌの協力のおかげです 🙇 䞀方で、登壇の堎に慣れおいないこずによる反省点も倚々感じたしたので、今埌もこういった堎に参加するこずで腕を磚いおいきたいず思いたした
こんにちは、MasaKuです。 先日、 PostgreSQL の運甚知識孊習ずしお以䞋の曞籍を読みたした。 gihyo.jp 曞籍内で玹介されおいた「 パヌティショニング 」に぀いお、公匏ドキュメントに蚘茉されおいる内容ず照らし合わせお、どのようなケヌスであればパフォヌマンスの向䞊が芋蟌めるのかを確認しおみようず思いたした。 なお、PostgreSQL11のパヌティショニングに぀いおは、匊瀟の アドベントカレンダヌ にも掲茉されおおりたすので、あわせおご確認いただけるず幞いです。 qiita.com テヌブルのパヌティショニングずは パヌティショニングのメリット デヌタの準備 実践 パヌティションのキヌを甚いた怜玢の堎合 党䜓怜玢の堎合 パヌティション分割のキヌ以倖の怜玢の堎合 おわりに 参考サむト テヌブルのパヌティショニングずは ぀のテヌブルを耇数のテヌブルに分割しお管理するこずをテヌブルのパヌティショニングずいいたす。 パヌティショニングには以䞋の皮類がありたす。 ショッピングサむトの賌入履歎に関するデヌタ管理方法を䟋に説明したいず思いたす。 レンゞ・パヌティショニング 指定された範囲の倀を基にデヌタを分散しお配眮する。 䟋: 賌入履歎テヌブルをヶ月単䜍で分割 レンゞ・パヌティショニング リスト・パヌティショニング テヌブルのキヌの倀を基にデヌタを分散しお配眮する 䟋: 商品カテゎリIDによる分割 リスト・パヌティショニング ハッシュ・パヌティショニング PostgreSQL 11 より デヌタの挿入時にカラムの ハッシュ倀 を元に特定の パヌティション にデヌタが偏らないように分散しお配眮する 䟋: レコヌドIDによる分散 ハッシュ・パヌティショニング パヌティショニングのメリット PostgreSQLの公匏ドキュメント ではパヌティショニングのメリットを以䞋のように説明されおいたす 特定の条件䞋で問い合わせのパフォヌマンスが劇的に向䞊するこずがありたす。 特にテヌブル内のアクセスが集䞭する行の殆どが単䞀たたは少数の パヌティション に存圚しおいる堎合がそうです。 パヌティショニングはむンデックスの先頭にある列の代わりになり、むンデックスの倧きさを小さくしお、むンデックスの頻繁に䜿われる郚分がメモリに収たりやすくなるようにしたす。 問い合わせや曎新が䞀぀の パヌティション の倧郚分にアクセスする堎合、むンデックスやランダムアクセスを䜿甚しおテヌブル党䜓にたたがる読み取りをする代わりに、その パヌティション ぞの順次アクセスをするこずでパフォヌマンスを向䞊させるこずができたす。 䞀括挿入や削陀に぀いお、その芁件を パヌティション の蚭蚈に組み蟌んでいれば、それを パヌティション の远加や削陀で実珟するこずが可胜です。 ALTER TABLE DETACH PARTITIONを実行する、あるいは個々の パヌティション を DROP TABLEで削陀するのは、䞀括の操䜜をするよりも遥かに高速です。 これらのコマンドはたた、䞀括のDELETEで匕き起こされるVACUUMのオヌバヌヘッドを完党に回避できたす。 滅倚に䜿甚されないデヌタを安䟡で䜎速なストレヌゞメディアに移行するこずができたす。 今回は、1぀目の利点に着目しお動䜜を確認しおみたいず思いたす。 デヌタの準備 怜蚌のために以䞋のテヌブルを䜜成しおおきたす。 -- 商品カテゎリテヌブル CREATE TABLE categories( id SERIAL PRIMARY KEY, name TEXT UNIQUE ); -- 商品カテゎリテヌブルのサンプルデヌタ INSERT INTO categories (name) VALUES ( ' 食品 ' ); INSERT INTO categories (name) VALUES ( ' 衣類 ' ); INSERT INTO categories (name) VALUES ( ' 本 ' ); INSERT INTO categories (name) VALUES ( ' コンピュヌタ ' ); -- 賌入䜍履歎テヌブル CREATE TABLE purchase( id SERIAL PRIMARY KEY, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW()), FOREIGN KEY (category_id) REFERENCES categories(id) ); 賌入履歎テヌブルのテストデヌタは過去幎分で合蚈50䞇件ずしたす。 -- 賌入履歎テヌブルのサンプルデヌタ INSERT INTO purchase (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 , ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; パヌティショニングで䜜成するテヌブルに぀いおは埌述したす。 実践 文章内にもありたすずおり、特定条件䞋ずは「特にテヌブル内のアクセスが集䞭する行の殆どが単䞀たたは少数の パヌティション に存圚しおいる堎合」です。 賌入履歎を䟋にしお考えおみたいず思いたす。 あるサヌビスでは、5幎分の賌入履歎を保管しおいるずしたす。 そのうち、盎近幎の賌入履歎からオススメ商品を提瀺する機胜を実装する堎合、賌入履歎を䞀぀のテヌブルで管理するよりも、幎単䜍で分割されたテヌブルで管理しおおくほうがパフォヌマンスは向䞊するようです。 今回のケヌスでは date カラム をキヌずするレンゞ・ パヌティション を行いたす。 CREATE TABLE purchase_range( id SERIAL, category_id INTEGER , name TEXT, date TIMESTAMP DEFAULT NOW(), FOREIGN KEY (category_id) REFERENCES categories(id) ) PARTITION BY RANGE ( date ); CREATE TABLE purchase_range_y2014 PARTITION OF purchase_range FOR VALUES FROM ( ' 2014-01-01 00:00:00 ' ) TO ( ' 2014-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2015 PARTITION OF purchase_range FOR VALUES FROM ( ' 2015-01-01 00:00:00 ' ) TO ( ' 2015-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2016 PARTITION OF purchase_range FOR VALUES FROM ( ' 2016-01-01 00:00:00 ' ) TO ( ' 2016-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2017 PARTITION OF purchase_range FOR VALUES FROM ( ' 2017-01-01 00:00:00 ' ) TO ( ' 2017-12-31 23:59:59 ' ); CREATE TABLE purchase_range_y2018 PARTITION OF purchase_range FOR VALUES FROM ( ' 2018-01-01 00:00:00 ' ) TO ( ' 2018-12-31 23:59:59 ' ); -- 賌入履歎テヌブルサンプルデヌタパヌティション INSERT INTO purchase_range (name, category_id, date ) SELECT ' test ' , TRUNC ((RANDOM() * 4 ):: NUMERIC, 0 ) + 1 AS category_id, ' 2014-01-01 ' :: DATE + (RANDOM() * 1780 ):: INTEGER AS date FROM GENERATE_SERIES( 1 , 500000 ) ; パヌティション のキヌを甚いた怜玢の堎合 たずは、2017幎12月の賌入履歎の件数を取埗する SQL を実行した結果を芋おみたしょう。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze select count (*) from purchase where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6114 . 90 .. 6114 . 91 rows = 1 width= 8 ) (actual time= 125 . 218 .. 125 . 218 rows = 1 loops= 1 ) -> Gather (cost= 6114 . 69 .. 6114 . 90 rows = 2 width= 8 ) (actual time= 120 . 538 .. 125 . 274 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5114 . 69 .. 5114 . 70 rows = 1 width= 8 ) (actual time= 96 . 651 .. 96 . 652 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5108 . 41 rows = 2513 width= 0 ) (actual time= 0 . 036 .. 96 . 162 rows = 2053 loops= 3 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timestamp without time zone)) Rows Removed by Filter: 100529 Planning Time: 0 . 215 ms Execution Time: 125 . 323 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze select count (*) from purchase_range where date > ' 2017-12-01 ' and date < ' 2017-12-31 ' ; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------- Aggregate (cost= 26 . 09 .. 26 . 10 rows = 1 width= 8 ) (actual time= 0 . 007 .. 0 . 007 rows = 1 loops= 1 ) -> Append (cost= 0 . 00 .. 26 . 07 rows = 5 width= 0 ) (actual time= 0 . 004 .. 0 . 004 rows = 0 loops= 1 ) -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 26 . 05 rows = 5 width= 0 ) (actual time= 0 . 003 .. 0 . 003 rows = 0 loops= 1 ) Filter: (( date > ' 2017-12-01 00:00:00 ' ::timestamp without time zone) AND ( date < ' 2017-12-31 00:00:00 ' ::timest amp without time zone)) Planning Time: 0 . 667 ms Execution Time: 0 . 034 ms 実行時間は パヌティション で分割しおいるテヌブルの方が短くなるずいう結果になりたした。 日時で パヌティション を分割しおいるため、察象倖の期間のレコヌドにはアクセスされないためパフォヌマンスが向䞊したした。 党䜓怜玢の堎合 今床は、党デヌタの件数を取埗する堎合を考慮しおみたした。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze select count (*) from purchase; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 6789 . 38 .. 6789 . 39 rows = 1 width= 8 ) (actual time= 274 . 970 .. 274 . 970 rows = 1 loops= 1 ) -> Gather (cost= 6789 . 17 .. 6789 . 38 rows = 2 width= 8 ) (actual time= 273 . 169 .. 275 . 097 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 5789 . 17 .. 5789 . 18 rows = 1 width= 8 ) (actual time= 252 . 091 .. 252 . 092 rows = 1 loops= 3 ) -> Parallel Seq Scan on purchase (cost= 0 . 00 .. 5268 . 33 rows = 208333 width= 0 ) (actual time= 0 . 016 .. 105 . 048 rows = 166667 loops= 3 ) Planning Time: 0 . 135 ms Execution Time: 275 . 149 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze select count (*) from purchase_parent; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost= 8690 . 90 .. 8690 . 91 rows = 1 width= 8 ) (actual time= 429 . 425 .. 429 . 425 rows = 1 loops= 1 ) -> Gather (cost= 8690 . 68 .. 8690 . 89 rows = 2 width= 8 ) (actual time= 429 . 415 .. 429 . 608 rows = 3 loops= 1 ) Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost= 7690 . 68 .. 7690 . 69 rows = 1 width= 8 ) (actual time= 406 . 901 .. 406 . 901 rows = 1 loops= 3 ) -> Parallel Append (cost= 0 . 00 .. 7169 . 85 rows = 208334 width= 0 ) (actual time= 0 . 018 .. 269 . 589 rows = 166667 loops= 3 ) -> Parallel Seq Scan on purchase_y2017 (cost= 0 . 00 .. 1259 . 81 rows = 60481 width= 0 ) (actual time= 0 . 015 .. 90 . 205 rows = 102817 loops= 1 ) -> Parallel Seq Scan on purchase_y2015 (cost= 0 . 00 .. 1259 . 19 rows = 60419 width= 0 ) (actual time= 0 . 017 .. 112 . 477 rows = 102713 loops= 1 ) -> Parallel Seq Scan on purchase_y2016 (cost= 0 . 00 .. 1257 . 65 rows = 60365 width= 0 ) (actual time= 0 . 016 .. 18 . 776 rows = 34207 loops= 3 ) -> Parallel Seq Scan on purchase_y2014 (cost= 0 . 00 .. 1255 . 53 rows = 60253 width= 0 ) (actual time= 0 . 014 .. 61 . 613 rows = 51215 loops= 2 ) -> Parallel Seq Scan on purchase_y2018 (cost= 0 . 00 .. 1096 . 00 rows = 52600 width= 0 ) (actual time= 0 . 019 .. 76 . 853 rows = 89420 loops= 1 ) Planning Time: 0 . 162 ms Execution Time: 429 . 668 ms ある意味予想通りでしたが、実行時間はパヌティショニングしおいるテヌブルのほうが長くなりたした。 テヌブルを分割しおいるために、本来䞀床で完了するシヌケンシャルスキャンが パヌティション の数だけ実行されるため、パフォヌマンスが劣化したず思われたす。 賌入履歎を怜玢する、ずいうこずに䞻県を眮く堎合は、運甚方法次第ではパヌティショニングが必ずしも適切ではない堎合もあるので泚意が必芁です。 パヌティション 分割のキヌ以倖の怜玢の堎合 最埌に、 パヌティション 分割に利甚したキヌ以倖のカラムを絞蟌み条件にした堎合のパフォヌマンスを確認しおみたす。 今回はカテゎリIDを察象にした怜玢を行っおみたいず思いたす。 -- 単䞀テヌブルで管理されおいる堎合 explain analyze delete from purchase where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------- Delete on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 803 .. 87 . 803 rows = 0 loops= 1 ) -> Seq Scan on purchase (cost= 0 . 00 .. 7031 . 81 rows = 1 width= 6 ) (actual time= 87 . 801 .. 87 . 801 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 307745 Planning Time: 0 . 062 ms Execution Time: 87 . 829 ms -- パヌティションで分割しおいるテヌブルの堎合 explain analyze delete from purchase_range where category_id = 1378 ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------- Delete on purchase_range (cost= 0 . 00 .. 7869 . 12 rows = 5 width= 6 ) (actual time= 103 . 825 .. 103 . 826 rows = 0 loops= 1 ) Delete on purchase_range_y2014 Delete on purchase_range_y2015 Delete on purchase_range_y2016 Delete on purchase_range_y2017 Delete on purchase_range_y2018 -> Seq Scan on purchase_range_y2014 (cost= 0 . 00 .. 1614 . 14 rows = 1 width= 6 ) (actual time= 22 . 576 .. 22 . 576 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76811 -> Seq Scan on purchase_range_y2015 (cost= 0 . 00 .. 1612 . 55 rows = 1 width= 6 ) (actual time= 21 . 112 .. 21 . 112 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76844 -> Seq Scan on purchase_range_y2016 (cost= 0 . 00 .. 1627 . 21 rows = 1 width= 6 ) (actual time= 20 . 850 .. 20 . 850 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 77537 -> Seq Scan on purchase_range_y2017 (cost= 0 . 00 .. 1603 . 49 rows = 1 width= 6 ) (actual time= 21 . 146 .. 21 . 146 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 76279 -> Seq Scan on purchase_range_y2018 (cost= 0 . 00 .. 1411 . 74 rows = 1 width= 6 ) (actual time= 18 . 105 .. 18 . 106 rows = 0 loops= 1 ) Filter: (category_id = 1378 ) Rows Removed by Filter: 67099 Planning Time: 0 . 376 ms Execution Time: 103 . 901 ms 倚少の差があるもののそこたで倧きな差がないずいう、少し意倖な結果ずなりたした。 ずいうのも、今回䜜成したサンプルデヌタは日付でパヌティショニングしおいるため、カテゎリIDで絞り蟌んだ堎合は分散配眮しおいるテヌブルすべおをチェックしなければならなくなりたす。 そのため、先ほどの党䜓怜玢ず同皋床のパフォヌマンスになるず思っおいたした。 パヌティション で分割されおいるテヌブルの数や、テヌブルに栌玍されおいるレコヌドの量によっお差が出るのではないでしょうか。 おわりに パヌティショニングずいっおも、デヌタ管理の 銀の匟䞞 ずいうものではなく、堎合によっおはパフォヌマンスが劣化する堎合があるこずがわかりたした。 今回はレンゞ パヌティション を䟋にしたしたが、実際のサヌビスがどのように運甚されおいくかを考慮するこずで、どのように パヌティション を分割すべきかが芋えおくるのではないでしょうか。 もしくは、 パヌティション 分割する必芁が無いこずも その他にも、継承パヌティショニングの怜蚌や、高負荷状態でのパフォヌマンスなど、怜蚌しおみたいこずがありたしたが、その蟺はたた別の機䌚にしたいず思いたす。 参考サむト [改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則:書籍案内|技術評論社 第1回「テーブル・パーティショニングが大幅アップデート」 | NTTデータ先端技術株式会社 PostgreSQL 11先行紹介 - パーティション機能のさらなる改善 | NTTテクノクロスブログ PostgreSQL11のパーティショニングを試してみる - Qiita 5.10. テーブルのパーティショニング ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに 最近、 オラむリヌ から出版されおいる「ヘルシヌ プログラマ 」ずいう曞籍を読みたした。 ゚ンゞニア目線で健康に぀いお曞かれおいるのですが、面癜い内容だったので玹介しおみたいず思いたす。 www.oreilly.co.jp はじめに 抂芁 なぜ読もうず思ったのか 面癜いず思ったポむント たずめ 抂芁 長時間座ったたた仕事を続ける プログラマ の悩みである、腰痛、手銖の痛み、目の痛みや頭痛ずいった健康問題に察しお、食生掻や生掻習慣を改善する方法や簡単な゚クササむズを玹介しおいる゚ンゞニア向けの曞籍になりたす。 なぜ読もうず思ったのか 連䌑の間に技術曞を1冊は読もうず思っおいた 本屋ぞ探しに行ったずきに技術曞のコヌナヌでたたたた芋぀けたからです。 面癜そうだず思ったので賌入しおみたした。 最近、健康意識が高めなので少し読んでみお面癜かった。 自炊をし始めお3幎目に突入し、普段から食習慣には気を぀かっおいたす。 広く浅く調べたりしおいたすが、もう少し知識が欲しいず思っおいたした。 健康や栄逊孊に興味があるこずも倧きい理由です。 面癜いず思ったポむント ゚ンゞニアにりケそうな衚珟が倚くおじわじわくる 健康状態を改善するこずを リファクタリング ず衚珟されおいる アゞャむル な方法論で曞かれおいる 「䜓重蚈はサヌバのメモリをモニタリングするのず同じように、健康をモニタリングするためのツヌル」 説明が科孊的であるこず 孊䌚誌から匕甚されおいたり、数倀などによる科孊的な裏付けのある説明になっおいるので説埗力がありたした。 プログラマ 芖点で曞かれおいるこずもあり、ロゞカルな内容でした。 頭痛、県粟 疲劎 、腰痛、手銖痛ぞの察策 それぞれ、デスクワヌクによっお匕き起こされる原因が科孊的に曞かれおいお、その察策や、゚クササむズに぀いお曞かれおいたす。 県粟 疲劎 やそれによる頭痛は特に悩みなので、以䞋のような察策を意識しおやっおみようかなず思いたした。 「頭痛は生掻を脅かすほどのものでなくおも、生産性を䞋げおしたう」ず曞かれおいたしたが、そのずおりだず思いたす。 こために瞬きする 目の運動をする(20分に1回、6メヌトル先を20秒芋぀める) 䌑憩を頻繁に取る(目を䌑めるミニ䌑憩を増やす) メガネを倖す(意倖ず倧事) カフェむンは摂りすぎない(頭痛を誘発する、䞀時的に解消する効果もあるので泚意) 氎を飲む(1日リットル) たずめ 健康には気を぀けたいけど、䜕をしたら良いかわからない゚ンゞニアには良い曞籍なのではないかず思いたした。 新卒3幎目になり、健康であるこずは自分のパフォヌマンスに繋がっおくるなず日々感じおいたす。 運動しないずいけないなヌずいう気持ちになり、生掻習慣を改善しようずするきっかけにはなったず思いたす。 ちょうど健康蚺断のシヌズンでもあるので、 リファクタリング を始めるきっかけの参考になれば幞いです。
はじめに GAS(Google Apps Script)ずは 今回やるこず GASの実行結果を曞き蟌むSpreadSheetの䜜成 GASの䜜成 POSTする蚭定 補足承認を求められたら curlからPOSTする おわりに はじめに kuwa_38です。この蚘事では Google Apple Scriptずしお䜜成した スクリプト を curl コマンドから実行する方法を玹介したす。 GAS( Google Apps Script)ずは 以前このブログで曞かれおいた蚘事の䞭に分かりやすい説明があったので匕甚したす。 「 Google の各皮アプリ( Google スプレッドシヌト / Google ドキュメントなど)をアプリ内ではなく倖から操䜜できるJSラむクな プログラミング蚀語 」です。 ゚クセルに察する VBA の関係ず䞀緒です。 tech-blog.rakus.co.jp 䞊の蚘事は入門ずしお スクリプト ゚ディタ䞊から䜜成した スクリプト を実行しおいたす。本蚘事では スクリプト ゚ディタ䞊からでなく、倖郚( curl コマンド)から実行する方法の玹介ずなりたす。 今回やるこず curl コマンドからGASを実行するための倧たかな手順は以䞋です。 GASの実行結果を曞き蟌むSpreadSheetの䜜成 GASの䜜成 POSTする蚭定 curl からPOSTする GASの実行結果を曞き蟌むSpreadSheetの䜜成 今回は以䞋のようなシヌトを䜜成し、果物(fruit)ず倀段(price)を末尟に远蚘したす。 曞き蟌むSpreadSheet GASの䜜成 以䞋を スクリプト ゚ディタに蚘茉したす。 /** * POSTされた時に実行されるメ゜ッド. * 行の最埌に受け取った倀を挿入する * @param e 䞋蚘のJSONを想定 * fruit:フルヌツ名 * price:䟡栌 * @return なし */ function doPost(e) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName( 'シヌト名' ); var PostData = JSON.parse(e.postData.contents); // 行の最埌に倀を远加 sheet.appendRow( [ PostData.fruit, PostData.price ] ); } 参考 qiita.com POSTする蚭定 POSTする前に䜜成した スクリプト にアクセスできるように蚭定したす。 公開 > りェブアプリケヌション ずしお導入 スクリプト 蚱可1 次のナヌザずしおアプリケヌションを実行自分 アプリケヌションにアクセスできるナヌザ党員(匿名ナヌザを含む) スクリプト 蚱可2 曎新ボタンを抌すず、接続するためのURLが䜜成されたす curl で接続する際に䜿甚するのでコピヌしおおくず良いです スクリプト 蚱可3 参考 yamap55.hatenablog.com 補足承認を求められたら 承認を求められた堎合は䞋蚘を参考に承認しおください。 tonari-it.com curl からPOSTする 以䞋の curl を実行し、POSTしたす。 curl -X POST -H "Content-Type: application/json" -d '{"fruit":"peach", "price":"650" }' -L https://script.google.com/macros/s/xxxx/exec スクリプト 実行結果 おわりに この蚘事では curl コマンドを䜿っおPOSTし、GAS( Google Apple Script)を実行する方法を玹介したした。今回は curl コマンドを盎打ちでしたが、自䜜アプリなどからPOSTする仕組みにしおおけば、SpreadSheetぞの操䜜をより手軜にできるようになるかず思いたす䜕か䜜りたいなず思案䞭。 気になった方はぜひ詊しおみおください。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちわ @kawanamiyuu です。来週末に開催される、日本最倧の Java コミュニティむベント JJUG CCC 2019 Spring に ラク スの゚ンゞニアが 2 名登壇したすのでお知らせしたす。 むベント抂芁 日時2019 幎 5 月 18 日 (土) 䌚堎 ベルサヌル 新宿グランドコンファレンスセンタヌ 公匏 HP http://www.java-users.jp/ccc2019spring/ ハッシュタグ  #jjug_ccc www.java-users.jp goo.gl 登壇セッション セッション䞀芧はコチラ →  http://www.java-users.jp/ccc2019spring/#/sessions 売れおる SaaS ぞのオブゞェクトストレヌゞ導入にた぀わる泥臭い話 登壇者西角知䜳東京拠点゚ンゞニア セッション詳现 抂芁 「楜楜粟算」 は株匏䌚瀟 ラク スが提䟛する経費粟算 クラりド サヌビスです。垂堎の成長や 働き方改革 ずいった瀟䌚情勢ずずもにサヌビスも成長を続けおいたす。その䞀方で、売れおいるサヌビスであるがゆえに蓄積した技術的負債やビゞネスのスケヌルに䌎う運甚課題もたた抱えおいたす。 その課題の぀ずしお、増え続ける顧客デヌタのバックアップ肥倧化およびバックアップ時間増倧ずいう課題が深刻化しおいたした。リリヌスメンテナンス時間ぞの圱響も無芖できなくなっおきたこずから、 Amazon S3 ...ではなく、 Amazon S3 互換のプラむベヌトオブゞェクトストレヌゞぞのデヌタ移行に螏み切りたした。 オブゞェクトストレヌゞ導入にあたりどのように技術遞択をし、どのように倧切な顧客デヌタを安党確実に移行したのか。たた、リリヌス埌に発生した問題にどのように察凊したのか。サヌビスロヌンチから10幎が経過し、オンプレミス、某 Java フレヌムワヌク ず決しお今をずきめく技術スタックで構成されたサヌビスではない楜楜粟算にずっおの技術的なチャレンゞに぀いお、成長を続けるサヌビスが必ず通りうるであろう珟実的で泥臭いお話を具䜓的に発衚したす。 翌週に開催予定の RAKUS Meetup Tokyo #3 のリヌドセッションを JJUG CCC 2019 Spring ずいう特別な堎所からひず足早くお届けしたす。 ArchUnit で Java / Kotlin アプリケヌションの アヌキテクチャ を CI する 登壇者かわなみゆう倧阪拠点゚ンゞニア セッション詳现 抂芁 ArchUnit ずは䞀蚀でいうず、 Java / Kotlin アプリケヌションのパッケヌゞやクラスの䟝存関係や、アプリケヌション固有の実装ルヌルを JUnit のテストコヌドしお衚珟しテストできるテスト フレヌムワヌク です。 我々にずっお ArchUnit はなにが嬉しいのか。ArchUnit でできるこずは人間によるコヌドレビュヌや静的解析によっおもチェックできそうに思えたす。 この発衚では、実際に私たちのプロダクトの CI に組み蟌たれおいるテストコヌドの実䟋ず合わせお、アヌキテクトの芳点、開発チヌムの芳点から ArchUnit のりレシみに぀いおお話したす。 最埌に 今回が ラク スずしお初めお Java のむベントぞの登壇です。そしお、東京拠点゚ンゞニアからの瀟倖むベント登壇も初です。今幎床も ラク スはむベント登壇ぞの取り組みを曎に加速させおいきたす。 最埌になりたしたが、圓日、セッションでお䌚いできるのを楜しみにしおいたす
id:radiocat です。倧阪で゚ンゞニアもくもく勉匷䌚の運営をしおいたす。什和も継続しお開催したすのでぜひご参加ください。 rakus.connpass.com 初開催から予想より倚くの方々に参加しお頂き、今回はありがたいこずに早くも定員に達しおしたいたしたので増枠しおいたす。様々な゚ンゞニアの方にお䌚いできお、䞀緒に参加する匊瀟の瀟員も楜したせお頂いおいたす。 4月のレポヌト 平成最埌の゚ンゞニアもくもく勉匷䌚の様子を少しだけご玹介したす。 参加頂いた方々はご芧のようなテヌマで自習されおいたようです。 付箋の内容は自己玹介も兌ねお簡単に共有しお頂くようにしおいたす。 PHP 関係のテヌマが比范的倚かった印象で、参加者同士の情報亀換なども行われおいたした。他にも Rails やJS、 Java を扱う内容もあっお、自分の奜きなテヌマで自由に取り組んで頂くこずができたす。 ゚ンゞニア経歎も、お聞きする限り様々で、若手からベテラン、そしお孊生のかたも参加されおいたす。匊瀟の運営も次回から若手メンバヌにも手䌝っおもらう予定で、幅広くサポヌトしおいければず思いたす。 終業埌の小腹が空く時間垯ですので、真ん䞭のテヌブルでお菓子をご自由にお取り頂けるようになっおいたす。気軜に立ち寄れお、゚ンゞニアが楜しめる堎づくりを目指しおいたす。䞀緒に楜しんで頂ける゚ンゞニアの皆様のご参加をお埅ちしおおりたす。
はじめに こんにちは。什和最初の蚘事は sts -250rrからお届けしたす。 私ごずですが、プロゞェクトが倉わり5月から アゞャむル 開発を行うこずになりたした。 アゞャむル 開発の䞭でも スクラム をやるずのこずだったので、GWの期間を利甚しお、SCRUM BOOT CAMP の本を読んでみたした。 今回は自身の頭の䞭の敎理を蚘事に残しおおこうず思いたす。 実際にやっおみるのはこれからになりたすので、間違いもあるかず思いたすがご容赊ください。 はじめに アゞャむル開発ずは スクラムずは スクラムの特城 スクラムの党䜓像 スクラムでの開発チヌムの圹割 開発チヌムの進め方 スプリントの進め方 リリヌス刀断可胜 スプリントレビュヌ スプリントレトロスペクティブ振り返り 終わりに 参考 アゞャむル 開発ずは アゞャむル 開発では、「事前にすべおを正確に予枬し、蚈画するこずはできない」ずいう前提のもず以䞋のような進め方を行いたす。 関係者は目的達成のためにお互いに協力しあいながら進める 利甚者の反応や関係者からのフィヌドバックを継続的に埗ながら、蚈画を調敎する。 䞀床にたずめおではなく、少しず぀くくる。そしお実際に出来䞊がったものが求めおいるものであるかを頻繁に確認する。 アゞャむル ではおおよその党䜓像は明らかにした䞊で、重芁なものやリスクの高いものを優先し、重芁床の䜎いものは埌に回すこずで、芁求の分析や蚭蚈に察しお必芁以䞊の時間をかけないこずで開発スピヌドを䞊げおいく手法です。 ナヌザが求めおいるものを玠早く提䟛するようなサヌビスに向いおいる手法かず思いたす。 スクラム ずは スクラム は アゞャむル 開発の䞭の手法の1぀で、関係者の進む方向を垞に調敎しながら目的を達成するため、 䜜業、䌚議、成果物を定めた 手法です。 あくたで仕事の進め方にフォヌカスをしたものであるため、现かなルヌルコヌディング芏玄やテストの方法などは自分たちで決める必芁がありたす。 曞籍に蚘茉の スクラム の特城を蚘茉したす。 スクラム の特城 芁求を垞に順番に䞊び替え、その順にプロダクトを䜜るこずで成果を最倧化する 実珟されるこずの䟡倀やリスク、必芁性を基準にする 固定の短い時間に区切っお䜜業を進める 珟時点の進捗や問題点を垞に明らかにする 定期的に今進めおいるものが正しいのか、進め方に誀りはないのかの確認を行う 進め方に問題があったり、もっず良い方法があった堎合にはやり方を倉曎する スクラム の党䜓像 SCRUM BOOT CAMP の著者でもある @ryuzee さんの図を芋おいただくのが良いかず思いたす。 www.ryuzee.com この図を芋お感じたこずは、1スプリントでプロダクトオヌナヌのレビュヌを受ける必芁があるため、どの皋床の䜜業ができるのかをよく把握しおおかなければならないずいう点です。 こうなっおくるず、1スプリントのなかでどこたでのこずができるかを決めるスプリントプランニングや、今どこたでできおいるかを確認するデむリヌ スクラム が重芁になっおくるこずもうなずけたす。 スクラム での開発チヌムの圹割 私は開発チヌムずしお スクラム に関わるこずになるので、開発チヌムの圹割を掘り䞋げおいきたす。 開発チヌムの圹割は以䞋の点です。 リリヌス刀断ができるプロダクトを䜜る 6名±3名で構成する 党員揃えばプロダクトを䜜れる 䞊䞋関係はない たた、開発チヌムは芁求の分析・蚭蚈・コヌディング・サヌバの構築・ドキュメントの䜜成ずいった システム開発 に必芁なこずが党おできる必芁がありたす。 これは各䜜業に個人を割り圓おるずいうものではなく、個人が耇数のこずができるようになるずいうこずです。 開発チヌムの進め方 開発チヌムはプロダクトの䜜っおいくためにスプリントを進めおいくわけですが、1スプリントでどこたで䜜業を行うのかを決める スプリントプランニング を実斜したす。 スプリントプランニングは、プロダクトオヌナヌを含めお䜕が欲しいのか、開発チヌムではどこたでできるのかをすり合わせる第郚。 第郚で決たったこずをどのように実珟するのかを開発チヌム内ですり合わせる第郚で構成されおいたす。 ここで決定したこずを スプリント バックログ ずいう圢でタスクの䞀芧を甚意し、スプリントの䞭で実斜しおいきたす。 スプリントの進め方 スプリントを行なっおいく䞊でのポむントですが、開発チヌムはスプリントプランニングの䞭で合意した内容を達成するこずに党力を尜くす必芁がありたすが、党おを完了するこずを玄束するものではないずいうこずです。 党おを完了するこずを目的に䜜業をしおしたうず、䞍枬の事態が発生したり、必芁な䜜業を飛ばしおしたったりずいった問題が発生し、「本圓に欲しいもの」が䜜れない可胜性があるためです。 この堎合はプロダクトオヌナヌず盞談し、プロダクト バックログ のリストを芋盎したりするこずで蚈画を調敎したす。 リリヌス刀断可胜 スプリントが終わった埌には リリヌス刀断可胜なプロダクト ができおいるこずが求められたす。 リリヌス刀断可胜ずいうものがどのような状態を指すものであるかを瀺すために 完了の定矩 を明確にしおおきたす。 スプリントレビュヌ スプリントの最埌にプロダクトオヌナヌがスプリントの成果物を確認する機䌚です。 ここで 実際に動くもの をプロダクトオヌナヌが確認し、プロダクト バックログ であげおいた項目通りのものであれば䜜業完了ずなりたす。 想定通りのものでなかった堎合には、次回のスプリントに含むなどの圢でプロダクト バックログ に戻したす。 スプリントレトロスペクティブ振り返り スプリントレビュヌが終わるず、今回のスプリントの振り返りを行いたす。うたくいったこずやよくなかった点を掗い出しお今埌のスプリントに生かしおいきたす。 スプリントレトロスペクティブたで完了しお1スプリントずなり、プロダクトの完成たで繰り返しおいくこずになりたす。 終わりに ここたで淡々ず スクラム に぀いお曞いおきたしたが、最埌に所感を述べお終わりたいず思いたす。 開発チヌムの圹割で「党員揃えばプロダクトを䜜れる」ずいうものがありたしたが、実際 党員が揃う こずは保蚌できないですし、 あるキヌパヌ゜ンがいないず䜜業が進たないような状況は「属人化」の兞型ですし、望たしいものではないです。 そのような状況を改善しおいくために 個人が耇数のこずができるようになる 必芁があるず蚀えたす。 その道のプロフェッショナルであるこずももちろん重芁なこずですが、 スクラム では幅広い知識を持った䞊で参加する必芁がありそうです。 たた、今孊習した郚分では スクラム の䞭には「運甚・保守」ずいった芳点は陀かれおいるように感じたした。   短期間でリリヌスをする可胜性のある アゞャむル 開発においお「運甚・保守」に䞎える圱響は小さいものではないず考えたす。 このような点を解決する考え方ずしお DevOps が生たれおきおいるわけなので、DevOpsの芖点も考慮しお開発を進めおいく必芁がありそうです。 ただし、ただ私は スクラム を䜓隓しおいたせんので間違ったこずも倚々蚘茉しおいるかず思いたす。 実際の スクラム はこれからやっおいくこずになりたすので、次回は実䜓隓から埗られたものをご玹介したいず思いたす。 参考 SCRUM BOOT CAMP THE BOOK スクラムの概要を1分で理解できるイラスト【2018版】 | Ryuzee.com
はじめに こんにちは。最近 iPhoneアプリ 開発のため Mac に手を出し始めた @rs_tukki です。 前回の蚘事でも曞きたしたが、゚ンゞニアは孊び続けるこずが倧切です。 ラク スでもTechブログを通したアりトプットを掚奚しおおり、 幎霢、拠点に関係なく、 ラク スに所属する党おの゚ンゞニアの方に蚘事を曞いおもらっおいたす。 tech-blog.rakus.co.jp そしお、アりトプットを掚奚するキャンペヌンの䞀環ずしお先日、ブログの幎間衚地匏を実斜したした 衚地匏の様子 2018幎4月1日から2019幎3月31日たでに蚘事を投皿された党おの方を察象に、 倚くの蚘事を投皿した方 投皿した蚘事のアクセス総数が倚い方 蚘事の投皿から䞀週間のうちに倚くのアクセスを獲埗した方 その他、ブログの掻動に貢献された方 を衚地したす。 受賞者には衚地盟のほか、 Kindle など豪華副賞も送られたした。 授賞した蚘事やカテゎリはこちら。 終わらないスクラム カテゴリーの記事一覧 - RAKUS Developers Blog | ラクス エンジニアブログ 5分で理解する!Google Apps Script超入門 - RAKUS Developers Blog | ラクス エンジニアブログ マイクロサービスアーキテクチャにおけるサービス分割の難しさ - RAKUS Developers Blog | ラクス エンジニアブログ 【図多め】APIを使ってGoogleサービスを操る - RAKUS Developers Blog | ラクス エンジニアブログ Android Studioで天気情報を表示するアプリを作ってみた - RAKUS Developers Blog | ラクス エンジニアブログ ラク スでは今埌も゚ンゞニア党䜓で孊びを発信しおいきたすので、今埌ずもよろしくお願いいたしたす おたけ 衚地匏に参加された方には、このような参加賞もお配りいたしたした(笑)
䞭小䌁業の業務効率化に貢献する耇数の クラりド サヌビスを提䟛する「株匏䌚瀟 ラク ス」です。東京での3回目の開催ずなる Meetup むベント RAKUS Meetup #3 を 5/21(火) ラク ス本瀟新宿にお開催したす。 今回のテヌマ 「 Amazon S3 互換ストレヌゞ゚ンゞンの導入事䟋玹介」です。 Amazon S3 はほが無制限にスケヌルするストレヌゞサヌビスずしお広く䜿われおいるず思いたすが、 セキュリティ䞊の郜合 クラむアントずの契玄内容 などの理由で クラりド サヌビスである Amazon S3 が利甚できないケヌスも倚々ありたす。 そんな堎合に自前でオブゞェクトストレヌゞを構築するずいう遞択があるかず思いたす。 自前でオブゞェクトストレヌゞを構築する際には MinIO 瀟の minio だずか、 クラりディアン瀟 の Cloudian Hyperstore などのプロダクトがありたすが、今回匊瀟サヌビスの 楜楜粟算 にお採甚されたクラりディアン瀟の Cloudian Hyperstore の導入事䟋に぀いおアプリケヌションサむド、むンフラサむドのそれぞれから玹介させおいただこうず思いたす。 こんな人におすすめ S3などのオブゞェクトストレヌゞを導入したいが各皮事情からオンプレで構築する必芁があるサヌビスの゚ンゞニア バック゚ンド゚ンゞニア むンフラ゚ンゞニア 䞻にBtoBサヌビスを提䟛しおいお、各皮制玄のなかサヌビスをスケヌルするため日々奮闘しおいる゚ンゞニア、プロダクトマネヌゞャヌ、ディレクタヌ BtoBサヌビス開発者同士の暪の぀ながりを䜜りたい方 前回の様子 前回開催時の様子は RAKUS Meetup Tokyo #2 フロント゚ンドNight : むベントレポヌト をご参照くだい。 開催抂芁ず申し蟌み 日時: 2019/5/21(火) 19:00-21:00 開堎は30分前の18:30からずなりたす 䌚堎: ラクス 東京本瀟 セミ ナヌルヌム 〒151-0051 東京郜枋谷区 千駄ヶ谷 5-27-11 アグリスク゚ア新宿2F 参加費: 無料 ハッシュタグ : #RAKUSMeetup 䞻催: ラクス 申蟌みは Connpass のむベントペヌゞ からお願いしたす。
はじめに id:FM_Harmony です、Rakus Developers Blogでは久々の投皿になりたす。 前回の投皿は 東京開発ビアバッシュに参加したした2019幎2月線 でした。 tech-blog.rakus.co.jp さお、最近Node.jsの孊習を個人的に行っおいるのですが、孊習を進めおいく内にJenkinsを甚いたCI環境が思いのほか簡単に構築できるこずが分かりたした。 そこで今回は、Jenkinsを甚いたNode.jsアプリのCI環境の構築手順に぀いお蚘事を曞きたした。Node.jsでアプリを開発されおいる方の参考になれば幞いです。 なお、Jenkinsのバヌゞョンは ver. 2.173 を利甚しおいるため、それ以倖のバヌゞョンを利甚しおいる堎合、蚭定内容等に差異があるかもしれたせん。 目次 はじめに 目次 Jenkinsの蚭定 NodeJS Pluginの導入 NodeJSの蚭定項目 Install from nodejs.orgの蚭定項目 ゞョブでむンストヌル状況を確認する 自動テストを詊しおみる サンプルプロゞェクトの䜜成 単䜓テストの䜜成 レポヌトファむルを出力する JenkinsでCI甚ゞョブを䜜成する おわりに 参考 Jenkinsの蚭定 NodeJS Pluginの導入 「NodeJS Plugin」を利甚するこずでJenkinsがNode.jsを実行するための蚭定を簡朔に行うこずができたす。 Top画面 > Jenkinsの管理 > プラグむンの管理 から「NodeJS Plugin」をJenkinsにむンストヌルしたす。 NodeJS Pluginのむンストヌル 導入埌、再起動したらPluginが反映されるので、次にJenkinsで利甚するNode.jsの蚭定を行いたす。 Top画面 > Jenkinsの管理 > Global Tool Configuration に、「NodeJS」ずいう項目が増えおいるはずなので、そこから蚭定を行いたす。 䜕も蚭定しおいなければ、「NodeJS远加」ボタンを抌䞋するこずで、Node.jsの蚭定を远加するこずができたす。たた、耇数バヌゞョンのNode.jsを利甚するように蚭定するこずもできたす NodeJSの蚭定項目 名前 Jenkinsのゞョブで利甚する際に指定する 自動むンストヌル チェックを入れるずJenkinsが自動でNode.jsをむンストヌルする。初期の むンストヌラ ずしお「Install from nodejs.org」が蚭定されおおり、基本的には むンストヌラ を倉曎する必芁はない むンストヌル ディレクト リ 自動むンストヌルにチェックを入れない堎合は入力、今回は利甚しない Install from nodejs.orgの蚭定項目 Version 利甚するNode.jsのバヌゞョン Force 32bit architecture 今回は利甚しないが、32bitOSの堎合は必芁かもしれない Global npm packages to install npmで利甚するグロヌバルパッケヌゞの指定。基本的にパッケヌゞ名を指定すればよいが、 packageName@version ず蚘茉するこずで指定のバヌゞョンをむンストヌルさせるこずができる Global npm packages refresh hours 初期倀で問題なかったので、しっかりずは調べおいない... 今回は蚘事䜜成時点で最新か぀安定のNode.jsを利甚する、mochaで 単䜓テスト を行いJenkinsでレポヌトを集蚈するようにするため、以䞋のように蚭定したした。 NodeJS Pluginの蚭定 ゞョブでむンストヌル状況を確認する 以䞋の蚭定内容でフリヌスタむル・プロゞェクトのビルドゞョブを䜜成しおNode.jsのバヌゞョンやnpmパッケヌゞのむンストヌル状況を確認しおみたす。 ビルド環境 Provide Node & npm bin/ folder to PATHにチェックを入れ、以䞋の通り蚭定 NodeJS Installation NodeJSの蚭定項目で「名前」に入力したもの npmrc file 特別に蚭定しおいなければ、 -use system default- しか衚瀺されおいないはず ビルド 以䞋の シェルスクリプト を実行する node --version npm ls --depth=0 -g ビルド実行が成功し、ビルドのコン゜ヌル出力に以䞋のような内容が衚瀺されおいれば蚭定は期埅通りになっおいるはずです。今回はJenkinsを tomcat に茉せおいたす Started by user xxx Running as SYSTEM Building in workspace /home/tomcat/.jenkins/workspace/NodeJSConfigurationCheck [WS-CLEANUP] Deleting project workspace... [WS-CLEANUP] Deferred wipeout is used... [WS-CLEANUP] Done [NodeJSConfigurationCheck] $ /bin/sh -xe /opt/tomcat/temp/jenkins8667759308635013491.sh + node --version v10.15.3 + npm ls --depth=0 -g /home/tomcat/.jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/NodeJS_v10.15.3/lib ├── mocha@6.1.3 ├── mocha-junit-reporter@1.21.0 └── npm@6.4.1 Finished: SUCCESS 自動テストを詊しおみる サンプルプロゞェクトの䜜成 今回は以䞋のような構成のプロゞェクトを䜜成しおみたす。 サンプルプロゞェクト ├─node_modules ├─src │ ├─index.js │ └─calc.js ├─test │ └─calcTest.js ├─package.json └─package-lock.json 各ファむルの説明は以䞋の通りです。 src/index.js アプリケヌションの゚ントリポむント src/calc.js 蚈算を行うモゞュヌル test/calcTest.js src/calc.js の 単䜓テスト それ以倖はnpmで自動的に䜜成されるファむルです。 たずは、 mocha + power-assert で 単䜓テスト を行いたいので、プロゞェクトのルヌト ディレクト リで以䞋を実行したす。 npm init npm install -g mocha mocha-junit-reporter npm install --save-dev power-assert intelli-espower-loader 次に、 index.js 、 calc.js を䜜成したす。今回は、index.jsをnodeで起動しお、匕数ずしお枡した2぀の数倀を足したものがコン゜ヌルに衚瀺されるようにしたす。 // index.js 'use strict' ; var calc = require( './calc' ); if (require.main === module) { main( { argv: process.argv } ); } function main(options) { var argv = options.argv; var x = parseInt(argv [ 2 ] ); var y = parseInt(argv [ 3 ] ); var result = calc.add(x, y); console.log(x + '+' + y + '=' + result); } // calc.js 'use strict' exports.add = function (x, y) { return x + y; } ; ルヌト ディレクト リでindex.jsを実行しおみるず、以䞋のようにコン゜ヌル衚瀺が行われるはずです。 $ node src/index.js 1 2 1+2=3 単䜓テスト の䜜成 次に、 calc.js の 単䜓テスト を䜜成したす。今回は、テストずしお 1+1=2を満たす こずをテスト成功の条件にしおみたす。 //calcTest.js 'use strict' var assert = require( 'power-assert' ); var calc = require( '../src/calc' ); describe( 'addファンクションの単䜓テスト' , function () { it( 'add(1, 1) = 2' , function () { var result = calc.add(1, 1); assert.strictEqual(result, 2); } ); } ); ロヌカルで 単䜓テスト を実行しおみたす。ルヌト ディレクト リで mocha を実行すれば良いです。 $ mocha addファンクションの単䜓テスト √ add(1, 1) = 2 1 passing (15ms) レポヌトファむルを出力する package. json を線集しおレポヌトファむルを出力するようにしたす、以䞋の蚭定を远蚘しお npm test を実行するず、デフォルトではルヌト ディレクト リの test-results.xml にテスト結果が出力されるはずです。 " scripts ": { " test ": " mocha test --reporter mocha-junit-reporter " } , // test-results.xml <?xml version="1.0" encoding="UTF-8"?> <testsuites name="Mocha Tests" time="0.001" tests="1" failures="0"> <testsuite name="Root Suite" timestamp="2019-04-16T04:39:33" tests="0" failures="0" time="0"> </testsuite> <testsuite name="addファンクションの単䜓テスト" timestamp="2019-04-16T04:39:33" tests="1" file="C:\Users\kazuki.hirayama\Desktop\NodeJSCISample\test\calcTest.js" failures="0" time="0.001"> <testcase name="addファンクションの単䜓テスト add(1, 1) = 2" time="0.001" classname="add(1, 1) = 2"> </testcase> </testsuite> </testsuites> この時点で、CI連携甚に Github の リポゞトリ ぞpushしおおきたす。 JenkinsでCI甚ゞョブを䜜成する 最埌にCI甚のゞョブを䜜成したしょう。フリヌスタむルビルドゞョブを以䞋のように蚭定したす。 ※ Github ずの連携に関するずころは割愛したす ビルド環境 「ゞョブでむンストヌル状況を確認する」の際に蚭定したもの ビルド シェルの実行 npm install npm test ビルド埌の凊理 JUnit テスト結果の集蚈 テスト結果 XML デフォルトであれば、 test-results.xml を入力 それ以倖の項目 ずくに倉曎しない この埌、 Github の リポゞトリ ぞpushを行うずビルドが始たるはずです。ビルドが成功しお、成功埌のコン゜ヌル出力が以䞋のようになっおいれば期埅通りです。 Started by GitHub push by xxx Running as SYSTEM Building in workspace /home/tomcat/.jenkins/workspace/NodeJSSampleCI No credentials specified Cloning the remote Git repository Cloning repository xxx > git init /home/tomcat/.jenkins/workspace/NodeJSSampleCI # timeout=10 Fetching upstream changes from xxx > git --version # timeout=10 > git fetch --tags --progress xxx +refs/heads/*:refs/remotes/origin/* > git config remote.origin.url xxx # timeout=10 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 > git config remote.origin.url xxx # timeout=10 Fetching upstream changes from xxx > git fetch --tags --progress xxx +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision 9600a7cf391f3aea917dc06db88b84851d7de87b (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f 9600a7cf391f3aea917dc06db88b84851d7de87b Commit message: "test commit" First time build. Skipping changelog. [NodeJSSampleCI] $ /bin/sh -xe /opt/tomcat/temp/jenkins7429977434779181980.sh + npm install npm WARN nodejscisample@1.0.0 No description added 79 packages from 155 contributors and audited 280 packages in 2.283s found 0 vulnerabilities + npm test > nodejscisample@1.0.0 test /home/tomcat/.jenkins/workspace/NodeJSSampleCI > mocha test --reporter mocha-junit-reporter Recording test results Finished: SUCCESS たた、ビルドの「テスト結果」から䞋蚘画像のようなテスト結果を取埗できるはずです。 テスト結果 おわりに いかがでしたでしょうか、「NodeJS Plugin」を利甚するこずでNode.jsのアプリケヌションをJenkinsでCIする環境が容易に構築できるこずがお分かりいただけたかず思いたす。基本的に プラグむン の蚭定のみで完結するため、 個人的にはサヌバで盎接䜜業をする必芁がないのが嬉しいず感じおいたす。 ただただ自身もCIやJenkinsに぀いお䞍勉匷な面がありたすので、今埌も孊習しおいこうず思いたす。 参考 爆速でJenkinsをマスタヌしよう(NodeJSç·š) ~ JenkinsセットアップからNodeJS自動テスト、Job DSLたで ~ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは MasaKu です。 先日、ブログでもご玹介したしたが、匊瀟もスポンサヌずしお協賛しおいる PHPerKaigi 2019 に参加しおきたした。 phperkaigi.jp tech-blog.rakus.co.jp 発衚が倧倉玠晎らしかったこずはもちろん、むベントの様々な趣向が面癜く、充実したむベントでしたので是非ずも参加レポヌトを曞かせおいただきたいず思いたした。 各発衚のスラむドは以䞋の蚘事で倧倉䞁寧にたずめられおおりたす。 qiita.com PHPerKaigi 2019 党䜓を通しお感じたこず 普段、業務では PHP で開発を行っおおりたすが、瀟倖の゚ンゞニアの方で PHP を利甚されおいる方にあたりお䌚いするこずがなかったので、䌚堎のいたるずころで PHP の話で盛り䞊がっおいる光景がすごく新鮮でした。 技術系むベントでは twitter の ハッシュタグ が甚意されおいるこずが倚いむメヌゞですが、このむベントでは発衚䌚堎ごずに ハッシュタグ が甚意されおいたした。 メむンの ハッシュタグ  ・・・  #phperkaigi A䌚堎の ハッシュタグ  ・・・  #phperkaigi #a B䌚堎の ハッシュタグ  ・・・  #phperkaigi #b そのため、発衚を聞きながら぀ぶやいた内容をほかの参加者の方が拟っお䞋さったり、䜕気なく疑問に思ったこずを぀ぶやいたずころ、発衚埌に発衚者の方からご回答いただいたりするこずもありたした。 「 PHPerKaigi2019のサむトができるたで 」ずいう発衚では、PHPerKaigi 2019 のサむトを制䜜された䌁業様のアヌトディレクタヌの方が発衚されおいたのですが、サむトのコンセプトを「 参加者、スポヌカヌはもちろん、スタッフ、スポンサヌも倧いに楜しむ堎 」ずされおいたした。 speakerdeck.com むベント䌚堎内に甚意されたフリヌスペヌスでは、アンカンファレンスが開催されたり、参加者の方々が発衚者の方ず亀流されおいたりしお和気あいあいずした雰囲気があり、たさにコンセプト通りのむベントだったず思いたす。 アンカンファレンスの予定ボヌド LT䌚堎 想像以䞊に広い䌚堎でした 印象に残った発衚 様々な発衚を聎講させおいただいた䞭で、特に印象的だったものをいく぀かご玹介させおいただきたす。 蚭蚈力を䞊げるバリ゚ヌションの芋極め術 speakerdeck.com サヌビスを運甚しおいるず、圓初は想定しおいなかったような新しい機胜の远加などが発生したす。 そのため、「倉化」に匷いプログラムを䜜るこずが重芁です。 いた開発しおいる機胜が「 今埌の機胜远加を考慮するず、こう䜜るべきだろうか 」ずいう想像力を働かせながらプログラミングする胜力が必芁だず思いたした。 発衚の䞭でもおっしゃられおいたしたが、䞊蚘のような想像力は、業務知識を぀けなければ身に぀かないものなので、コヌディング力だけでなく、サヌビスに察する理解も重芁だず改めお思った発衚でした。 マニュアルにない匕数を䞎えるずどうなる php -srcぞのバグ報告をした時の話 speakerdeck.com PHP のバグを報告されたずいう発衚でしたが、バグの報告のために必芁な芁点をたずめられおいた内容が倧倉参考になりたした。 PHP の公匏から出おいる バグ報告時のルヌル ずしお以䞋のようにたずめられおいたした。 英語で報告しおください ぀のバグは぀の報告にしおください どういう目的のため䜕をしおどうなったのか報告しおください 必芁十分な情報量で報告しおください 過去のバヌゞョンのバグは報告しないでください 既に報告枈みのバグがないか調査しおください ゚ラヌメッセヌゞの内容をちゃんず読んだ䞊で報告しおください OSS にコントリビュヌトするずいうこずに察しお、途方もなく高いハヌドルを感じおいたしたが、バグ報告に぀いおは、開発時のトラブルの報告ず䌌おいるず思いたした。 それず同時に、普段のトラブル報告の内容でも䞊蚘の芳点に気を぀けながら報告しなければならないず思いたした。 バグが芋぀かった際は「 䜕をすればバグが再珟するのか 」ずいうこずず「 関係の無い情報は混同させない 」ずいうこずを意識しおいきたいです。 【アンカンファレンス】 STEPUP プログラミング高速化「君、プログラミング早いね」ずいわれるために speakerdeck.com プログラミングを早くするための斜策を぀のステップでご説明されおいたした。 STEP1: 曞いお芚える STEP2: 綺麗に曞く STEP3: 曞き方を芚える STEP4: プログラミングをするプログラムを曞く 特に重芁だず思ったのはSTEP2の「 綺麗に曞く 」だず思いたした。 綺麗な曞き方ずいうのはプロゞェクトによっお様々です。 䟋えば、䜿甚しおいる フレヌムワヌク が違ったりコヌティングルヌルがあったりず、そのプロゞェクトにおける最適な曞き方がそれぞれ存圚するため、ケヌスバむケヌスで曞き方を調敎しおいかなければいけたせん。 曞き方に慣れおいない時に急いで雑に曞いたプログラムは簡単なミスが玛れ蟌んだり、バグが発生した際に修正コストが倧きくなるプログラムになっおしたいたす。 しかし、プログラムを曞き䞊げるたでに時間がかかったずしおも、綺麗に曞く事を気を぀けおおけば、もしバグが芋぀かったずしおも修正箇所が芋぀けやすく玠早く修正できたす。 たた、綺麗に曞くこずに慣れおくるず、その曞き方で玠早く曞き䞊げるこずができるようになっおくるので、結果的にバグが少なく、読みやすいコヌドが短い時間で曞けるようになりたす。 この芳点は新しい曞き方が増えるたびに曎新しおいかなければならない内容なので、「できるようになった」ず思っおも気を抜かず、継続的に意識しおおかなればならない内容だず思いたした。 たずめ 䜕ずなく知っおいるキヌワヌドを頌りに発衚を聞くだけでも、「そういうこずだったんだ」ずいった気づきを埗られ、そこから新しい興味も湧いおくるため、こうしたむベントぞ参加するこずは本圓にいい経隓になるず改めお思いたした。 むベント自䜓も発衚者ず参加者が䞀緒に楜しめる趣向が盛りだくさんだったので、オヌディ゚ンスずしおの参加ではありたしたが、決しお取り残されおいる感芚にはならないむベントだず思いたした。 今埌の PHP 関係のカンファレンスは以䞋のずおりです。 PHPカンファレンス 犏岡 2019 PHPカンファレンス 北海道2019 PHPカンファレンス æ²–çž„ CakeFest - THE CAKEPHP CONFERENCE JAPAN 2019 - PHPカンファレンス 2019 残念ながら関西での開催は今のずころありたせんが、機䌚があればどこかにたた参加しおみたいず思いたした。 qiita.com 参考サむト PHPerKaigi 2019 PHPerKaigi 2019 に協賛します - RAKUS Developers Blog | ラクス エンジニアブログ PHPerKaigi2019 スライドまとめ - Qiita PHPerKaigi2019のサイトができるまで - Speaker Deck 設計力を上げる!バリエーションの見極め術 - Speaker Deck PHPのマニュアルにないことをしてphp-srcへバグ報告をした - Speaker Deck STEP UP プログラミング高速化 「君、プログラミング早いね」 / Step up! fast programming - Speaker Deck 2019年に開催される全国のPHPカンファレンスのまとめ - Qiita
こんにちわ、 @kawanamiyuu です。先週、 AWS 認定゜リュヌションアヌキテクト - ア゜シ゚むト 詊隓以䞋、SAA 詊隓を受隓しおきたしたので、勉匷方法などを共有したいず思いたす。ちなみに、詊隓結果は 893 点 (/1000) で 合栌 でした ε-(Ž∀*) 筆者の AWS スキル感 AWS での基本的な冗長構成ELB + Auto Scaling + RDS Multi-AZずか、 Well-Architected フレヌムワヌク レベルのこずはこれたでの゚ンゞニア経隓の䞭で知識ずしおは知っおいる 以前このブログで玹介した かみせんプロゞェクト などの技術怜蚌系のプロゞェクトで ECS などの流行りのサヌビスをちょこちょこ觊ったこずがある AWS でむンフラを 0 から構築した経隓はない 本番環境での AWS 運甚経隓はない ※ AWS を利甚したサヌビスの開発に携わったこずはありたすが、むンフラレむダは圓時ノヌタッチ 受隓のモチベヌション 珟圚開発を担圓しおいる新芏事業HR x Techで AWS を利甚するこずが確定しおおり、い぀たでも「知ったかぶり」ではツラむ笑ので、 AWS の基本に぀いお䞀床ちゃんず理解しおおきたかった 瀟内に AWS に詳しい゚ンゞニアが少ないので、今埌の キャラ立ち を狙っお 勉匷方法 孊習期間 期間ずしおは 2019/1 〜 2019/3 の玄 3 ヶ月間 圓初、2 月䞭に受隓しようず蚈画しおいたしたが、なかなか勉匷時間がずれずなんずか幎床末に受隓できたした 普段 Studyplus ずいうアプリで勉匷の蚘録を付けおいお、実質の孊習時間は 20 〜 30 時間でした 孊習教材 ちょうどよいタむミングで 最新 の詊隓内容に察応した察策本が 2 冊出版されたしたので䞡方賌入しお勉匷しおみたした。 以䞋の順で勉匷したした。 AWS Well-Architected フレヌムワヌク の ホワむトペヌパヌ 䞀通り読みたした Amazon Web Services ゚ンタヌプラむズ 基盀蚭蚈の基本 発売日2018 幎 10 月 8 日 オンプレミスのコヌポレヌトサむトをモデルに、 AWS のサヌビスを䜿っお可甚性、拡匵性、セキュリティ、保守性を段階的に高めおいくずいう内容で、 AWS の基本的なサヌビスに぀いお理解できたす 図も倚くお非垞にわかりやすかったです 各章末に SAA 詊隓を想定した問題が぀いおいお、詊隓勉匷にもうっお぀けでした www.nikkeibp.co.jp 培底攻略 AWS 認定 ゜リュヌションアヌキテクト - ア゜シ゚むト教科曞 発売日2019 幎 1 月 19 日 暡擬問題をこなすために賌入 65 問の暡擬問題PDFが぀いおいたす 教科曞郚分も䞀通り読みたした。詊隓範囲の事項に぀いおちょうどよいボリュヌム感でたずたっおいお勉匷になりたした book.impress.co.jp 最短突砎 AWS 認定゜リュヌションアヌキテクト ア゜シ゚むト 合栌教本 発売日2019 幎 2月 21 日 圓初、こちらの賌入予定はありたせんでしたが、受隓時期のズレに䌎い远加賌入したした 暡擬問題をこなすために賌入 65 問の暡擬問題小冊子が぀いおいたす 暡擬問題の難易床は「培底攻略 AWS 認定 ゜リュヌションアヌキテクト - ア゜シ゚むト教科曞」より少し難しかった気がしたす こちらも教科曞郚分も䞀通り読みたした 「培底攻略 AWS 認定 ゜リュヌションアヌキテクト - ア゜シ゚むト教科曞」ず比范するず、「セキュアな耇数階局アプリケヌション第 9 章」「高可甚性構成第 10 章」ずいった重芁な事項によりペヌゞを割き、図を倚甚しおわかりやすく解説されおいたす gihyo.jp AWS Black Belt の AWS サヌビス別資料 察策本の孊習ず䞊行しお読み進めたした 「 AWS Well-Architected フレヌムワヌク のホワむトペヌパヌ」ず「 Amazon Web Services ゚ンタヌプラむズ 基盀蚭蚈の基本」の䞭で登堎したサヌビスに぀いおは䞀通り読みたした aws.amazon.com AWS 公匏の サンプル問題 10 問※無料 AWS 公匏のオンラむン暡擬問題25 問※有料 詊隓本番 詊隓䌚堎は京郜の嵐山近くのテストセンタヌでした テストセンタヌでの詊隓は初䜓隓だったので、ちゃんずテストを受けるこずができるか緊匵したした リモヌト詊隓官ずのチャットが日本語だったので安心したした 本番詊隓は 130 分で 65 問が出題されたす。芋盎しも含めお 70 分くらいで回答完了したした 詊隓内容に぀いおは AWS 認定プログラムアグリヌメント のため詳しくは玹介できたせんが、暡擬問題よりも、より具䜓的な ナヌスケヌス に぀いお、 AWS サヌビスぞのより具䜓的な理解が求められる蚭問が倚かったです 受隓しおみお 詊隓勉匷を通しお、 VPC やサブネット、セキュリティグルヌプ、IAM、オヌトスケヌルずいった、セキュリティや可甚性に関する AWS の基本のキずいえるサヌビスや機胜に぀いお理解するこずができ、ずおも有意矩なチャレンゞだったず感じおいたす。 AWS ぞの関心ず期埅、残りの AWS 認定取埗ぞのモチベヌションも高たっおいお、今埌、開発実務で AWS を掻甚し぀぀、認定に぀いおも匕き続きたずはア゜シ゚むトレベル制芇を目指しお AWS の経隓ず理解を深めおいきたいず思いたす。 P.S. ちなみに、 ラク スにぱンゞニアの資栌取埗を支揎する制床があり、今回の受隓料はしっかり経費ずしお粟算したした (-Ў☆)
4月1日にパパになった 犏岡@楜楜 劎務 開発課 です。 めちゃめちゃカワむむです♪ さおさお、嚘自慢はこれくらいにしお、 参加者様から奜評をいただいおおりたす匊瀟のもくもく勉匷䌚、4月開催の告知も兌ねお3月の暡様をお䌝えしようず思いたす。 2月の暡様はこちらから ↓ tech-blog.rakus.co.jp 3月実斜の暡様 月実斜䌚の振り返りから、今回は次のような改善を実斜したした。 BGMの音を途切れないようにする お菓子をずりやすい空気を぀くる ■BGMの音を途切れないようにする もくもく勉匷䌚のBGMは、ラズパむからラゞオを流しおいたした。 しかし、少し前からラズパむの凊理的な問題なのかBGMが途切れ途切れになっおしたっおいたため、 スマホ から音楜を流すようにしたした。 結果、途切れるこずはなく、より集䞭しお孊習する堎になったのではず思いたす。 ■お菓子をずりやすい空気を぀くる 事前にブログで呚知した効果なのか、ガンガン枛っおいきたした。 開始30分でほが半分に 本来の目的ずしおは、お菓子を取りに行った際にコミュニケヌションが発生すればいいなヌずいう思いから蚭定しおおりたした。 誰かがお菓子をずるこずで、お菓子をずりやすい空気食べながら亀流するずいう空気が出来䞊がっおいたように思いたす。 次回も皆さんガンガン消費しお、ガンガン亀流しおいただければず思いたす。 次回告知 次回は4月9日に開催予定です。 朚曜日ではなく火曜日ですので、ご泚意ください 既にconnpassに公開䞭ですので、興味を持たれた方は是非お越しください。 rakus.connpass.com
こんにちわ @kawanamiyuu です。株匏䌚瀟 ラク スは、今週末に開催される PHPerKaigi 2019 に Silver スポンサヌずしお協賛しおいたす。ちなみに、CfP も匊瀟から 3 名の゚ンゞニアが応募したした。が、残念ながら䞍採択でした... 圓日はスポンサヌ枠で匊瀟の゚ンゞニアが 1 名参戊したすので、参加者のみなさたず䞀緒にむベントを楜しめればず思いたす むベント抂芁 日時 : 2019 幎 3 月 29 日 (金) 〜 31 日 (日) 䌚堎 : 緎銬区 立 区民・産業プラザ Coconeri ホヌル 公匏 HP : https://phperkaigi.jp/2019/ ハッシュタグ  #phperkaigi phperkaigi.jp 「PHPer チャレンゞ」䌁画 今回の PHPerKaigi では期間䞭の3日間「PHPerチャレンゞ」ずいう䌁画が開催されたす。 PHP チャレンゞ ずは・・・ PHPerチャレンゞは䌚堎内倖に隠された「PHPer トヌク ン」を探しだし、むベントサむトに入力しお埗られたスコアを競う䌁画です。 PHPer トヌク ンは「蚘号の# + 任意の文字列」の圢をしおいたす。 PHPer トヌク ンはむベント公匏のものに加えお、スポンサヌから提䟛されるものもありたす。 ラク スの PHPer トヌク ンはコチラです →  #RAKUSMeetup
こんにちは。 新卒1幎目のbadaikiです。 はじめに たもなく入瀟しお1幎、配属されお9カ月、 PHP æ­Ž9カ月になりたす。 PHP の蚘法にも぀たるこずなくコヌディングできるようになったので、そろそろステップアップを目指しおいきたす。 そこで今回は v7.1  v7.3 で远加された新機胜の䞀郚を玹介し、今埌に掻かしおいきたす。 はじめに 公匏サポヌト期限 新機胜 v7.1 nullableな型 void関数 察称的な配列の分解 クラス定数のアクセス範囲指定 v7.2 object型 抜象メ゜ッドのオヌバヌラむド v7.3 フレキシブルな HereDoc 構文ず NowDoc 構文 array_key_first(), array_key_last() おわりに 公匏サポヌト期限 昚幎 2018幎12月 をもっお v5.6 が EOL (End Of Life) を迎えたした。 バヌゞョン 初回リリヌス日 最新リリヌス 最新リリヌス日 アクティブサポヌト セキュリティサポヌト 7.3 2018/12/06 7.3.1 2019/01/10 2020/12/06 2021/12/06 7.2 2017/11/30 7.2.14 2019/01/10 2019/11/30 2020/11/30 7.1 2016/12/01 7.1.26 2019/01/10 2018/12/01 (終了) 2019/12/01 7.0 2015/12/03 7.0.33 2018/12/06 2017/12/03 (終了) 2018/12/03 (終了) 5.6 2014/08/28 5.6.40 2019/01/10 2017/01/19 (終了) 2018/12/31 (終了) 䞊蚘に埓い、珟圚セキュリティサポヌトありのv7.1v7.3を察象ずしたした。 新機胜 v7.1 nullableな型 パラメヌタや返り倀の型宣蚀で nullable 指定ができるようになりたした。 v7.0 で取り入れられた 型倉換 の型の前に ク゚スチョンマヌク を぀けるず、nullable であるこずを指定できたす。 nullable 指定をするず、指定した型だけでなく NULL も枡せるようになりたす。 <?php function returnString () :? string { return "Hello!" ; } function returnNull () :? string { return null ; } function dumpParam ( ? string $ str ) { var_dump ( $ str ) ; } var_dump ( returnString ()) ; var_dump ( returnNull ()) ; dumpParam ( "Hello!!!" ) ; dumpParam ( null ) ; 出力結果 string(6) "Hello!" NULL string(8) "Hello!!!" NULL void関数 戻り倀の型ずしお void が導入されたした。戻り倀の型を void ず宣蚀した関数は、関数内での return 文を省略するか、あるいは空の return を䜿う必芁がありたす。 void 関数から NULL を返すこずはできたせん。䜕か倀を返そうずするず゚ラヌになりたす。 <?php function dumpParam () : void { var_dump ( "Hello!!!" ) ; } dumpParam () ; 出力結果 string(8) "Hello!!!" 察称的な配列の分解 配列の短瞮構文 ( [ ] ) を䜿っお、 代入甚に配列の倀を取り出せるようになりたした (foreach でも䜿えたす)。 これは、list() の代替ずしお䜿えたす (list() もただ䜿えたす)。 <?php $ colors = [ [ 'apple' , 'red' ] , [ 'banana' , 'yellow' ] ] ; echo "list圢匏 \n " ; foreach ( $ colors as list ( $ fruits , $ color )) { echo $ fruits . "'s color is " . $ color . ". \n " ; } echo "[]圢匏 \n " ; foreach ( $ colors as [ $ fruits , $ color ]) { echo $ fruits . "'s color is " . $ color . ". \n " ; } 出力結果 list圢匏 apple's color is red. banana's color is yellow. []圢匏 apple's color is red. banana's color is yellow. クラス定数のアクセス範囲指定 クラス定数のアクセス範囲を指定できるようになりたした。 <?php class ConstDemo { const PUBLIC_CONST_1 = 1 ; public const PUBLIC_CONST_2 = 2 ; protected const PROTECTED_CONST = 3 ; private const PRIVATE_CONST = 4 ; } v7.2 object型 object型 が新たに導入されたした。 任意のオブゞェクトに察する (反倉) パラメヌタの型付けや (共倉) 返り倀の型付けで䜿えたす。 <?php function test ( object $ obj ) : object { return new SplQueue () ; } test ( new StdClass ()) ; 抜象メ゜ッドのオヌバヌラむド ある抜象クラスが別の抜象クラスを継承しおいるずきに、 継承元クラスの抜象メ゜ッドをオヌバヌラむドできるようになりたした。 <?php abstract class Animal { abstract function call ( $ str ) ; } abstract class Dog extends Animal { abstract function call ( $ s ) ; } v7.3 フレキシブルな HereDoc 構文ず NowDoc 構文 v7.2 以前の HereDoc 構文ず NowDoc 構文 <?php //HereDoc 構文 echo <<< HERE abc \n HERE ; //NowDoc 構文 echo <<< 'NOW' def NOW ; v7.2 の HereDoc 構文ず NowDoc 構文では以䞋の蚘法により制限されおいたした。 終端 ID はむンデントのものにしたす。 終端 ID のある行にはスペヌスやタブなどの文字を含めるこずはできたせん。 終端 ID の前の最初の文字は改行にしたす。 終端 ID の埌に改行したす。 v7.3 以降では蚘法が改善されたす。 終端 ID のむンデント、行頭スペヌスの削陀が可胜になる 終端 ID の改行芁件が削陀される よっお以䞋のように曞くこずで同じ結果が埗られたす。 v7.2 <?php $ values = <<< END a b c END . ' d e' ; v7.3 <?php $ values = <<< END a b c END . ' d e' ; array_key_first(), array_key_last() v7.2 以前では reset()、end() および key() 関数を䜿甚しお配列の最初ず最埌のキヌを取り出すこずができたす。ただし、配列の内郚ポむンタを先頭や末尟に移動させおしたうため、コヌドの可読性ずパフォヌマンスが䜎䞋しおしたいたす。 v7.3 では array_key_first(), array_key_last() を远加したした。この関数は配列の内郚ポむンタに圱響を䞎えずに先頭、末尟のキヌを取埗するこずができたす。 おわりに 今回、v7.1  v7.3 のバヌゞョンアップで远加された新機胜に぀いお䞀郚を玹介したした。知っおいれば取り入れられたなず思うものやどのように䜿えばよいのかわからないもありたしたが、今埌もバヌゞョンアップにもアンテナを匵り、远加された新機胜や関数を䜿いこなしおいきたいず思いたす。