GitHub がCI/CDを始めると聞いて

いやー、衝撃たるや。

とうことで、興奮気味に調べたことや感想のメモ。

先日のツイートBe one of the first to hear the latest on GitHub Actions. といっていたので「え!まだ、GitHub Actionsが進化する!?」とワクワクどきどきはしていたものの、そう来るとは〜〜〜

「これが何なのか」といえば、例えばクランチの記事など。

techcrunch.com

公式のエントリーが出てくるのが迅速なのも嬉しい

github.blog

&& public repoに対しても「Actions / CIが来るぞ」というのも、本当に待ち望んでいた事態でありまして、震える。

関連: GItHub Actionsを理解しよう! - 大好き!にちようび

実際どうなるのか?

残念ながら、まだ自分の環境では使えていないのですが。
例えばbootstrapは初期ローンチ組っぽい。(だってさ、こちらもまたpublic repoだぜ・・!)

なので、「実際に動いている様子」はここから見られる。

bootstrap/test.yml at master · twbs/bootstrap · GitHubで内容を定義しており、実際の結果は例えばこのコミットなど。

これらを比較してみて、「ジョブ(ステップ)が確かにそれぞれ実行・出力されているな」というイメージが掴めるのではないでしょうか。 f:id:o0h:20190809091716p:plain

移行はどうやるの?

諸々の制約はつくものの、マイグレーションプログラムが用意されています。
go製で、バイナリポンで動くのが嬉しい。数年前だったらシェルスクリプトだよねきっと。

help.github.com

これについては実際に手元で動かしてみたけど、たしかに「動いた」。
もともと自分で定義していた.workflowファイルが、なるほどこうなるのか〜と。

f:id:o0h:20190809094740p:plain

詳細な定義ファイルの書き方については、以下に仕様があります。

help.github.com

ざっくりいうと何なのか?

「GitHub CIについて」の公式資料がこちら。

help.github.com

ということで、 公式な説明は Core concepts for continuous integration with GitHub Actions を読んで見るのが近道だと思う。

大まかに言えば「Linux(Ubuntu) / Windows / Mac」のイメージや、あるいはコンテナベース(=GItHub Actions)で多様な処理を実行できる。そして、その処理の発火条件や前提条件(依存)の定義などを、柔軟に行える・・・!といったところか。 jobs.<job_id>.runs-onjobs.<job_id>.steps.usesを参照。

「GitHubのCI」だからこそできるような、例えば発火条件に「変更されたファイル(パス)の指定」があったり、「PRのアサイン状態」があったり。jobs.<job_id>.ifを参照。利用するサービス(DBとか)についても、Dockerのイメージを指定すれば組み込める。jobs.<job_id>.servicesを参照。

といった感じで、「どういった世界観なのか?」であれば「ジョブ > ステップの定義と、その発動条件やマトリックスのルールセットを定義する」という「ザ・CI」なのだけど*1。なのだけど、個人的には、「何をどこまでできるか?」という点で言えば「Workflow syntax for GitHub Actions」を読むだけでもかなりワクワクした!

いろいろな・・・本当に色々なことができちゃうな〜〜、と思う。 もちろん、プロダクションへの投入については、可用性もあることながらジョブの起動や並列実行の制約など「試してみないとなんとも言えない」部分は多い。それにしたって、現時点では最高に使ってみたいオモチャの1つなのは間違いない。。。!

はやく使ってみてぇ〜〜

*1:ActionsはVisualized Editorを目玉にしていた雰囲気もあったけど、どうするんだろうw

やったこと・書いたもの{2019,07}

会社ブログ

tech.connehito.com

tech.connehito.com

社内LT

OSS

github.com これの前段でissueも立ててみていた、cakeにissue立てるの初めて(だと思う) #13392 差分的に、このくらいならPR作っちゃったほうが早いよねーて思いつつ、「ずっと昔からあるクラスで(正直に言って)この違和感のあるコードが残っているのなんで?」っていう疑問があったので、議論があるのかなーという。
結果的にmarkstoryさんから「reasonable」と後押しをもらえたので、じゃあ書くね〜つってコードにした次第。

github.com

packagist.org ↑に書いた記事で紹介したやつ

勉強会・LT

中の人にTwitterでお声がけいただき参加。「Ops」っぽい人が多い空間で、新鮮だった!

その他

GWを振り返る

GWはあれやるぞ!!これやるぞ!!!という意気込みがあったのですが
ここ1ヵ月ほど、かなりのモヤモヤとエネルギー切れを起こしていたので*1
開始3日目くらいで「とにかく何も考えないようにしよう」とシフトしていました。
「やる気が出ない」というより、何かをやろうとすると強いストレスを感じる的なノリだったので、それならさ〜と開き直って布団生命体を全うしようと思ったわけです。

その結果、(布団の上で|デスクの前に座して飲酒をしながら)漫画を読み返したので、成果をまとめます。
読んだ順に*2、各シリーズの1巻を貼ります。


喧嘩稼業(1) (ヤングマガジンコミックス)

喧嘩稼業(1) (ヤングマガジンコミックス)

最高だった

子供はわかってあげない(上) (モーニング KC)

子供はわかってあげない(上) (モーニング KC)

久しぶりに読んだ、こんな話だったかそういえばー!よかった

たいようのマキバオー 1 (ジャンプコミックスDIGITAL)

たいようのマキバオー 1 (ジャンプコミックスDIGITAL)

よかった

たいようのマキバオーW 1 (プレイボーイコミックス)

たいようのマキバオーW 1 (プレイボーイコミックス)

よかった

まんがの作り方(1) (RYU COMICS)

まんがの作り方(1) (RYU COMICS)

よかった

幼女戦記(1) (角川コミックス・エース)

幼女戦記(1) (角川コミックス・エース)

よかった

波よ聞いてくれ(1) (アフタヌーンコミックス)

波よ聞いてくれ(1) (アフタヌーンコミックス)

好き

シスタージェネレーター 沙村広明短編集 (アフタヌーンコミックス)

シスタージェネレーター 沙村広明短編集 (アフタヌーンコミックス)

よかった

ヤサシイワタシ(1) (アフタヌーンコミックス)

ヤサシイワタシ(1) (アフタヌーンコミックス)

痛い・・😢

ヨイコノミライ [完全版](1) (IKKI COMIX)

ヨイコノミライ [完全版](1) (IKKI COMIX)

もっとドロドロしてなかったっけ!って思った

みどりのマキバオー 1 (ジャンプコミックスDIGITAL)

みどりのマキバオー 1 (ジャンプコミックスDIGITAL)

よかった

凪のお暇 1 (A.L.C. DX)

凪のお暇 1 (A.L.C. DX)

よかった

ベアゲルター(1) (シリウスコミックス)

ベアゲルター(1) (シリウスコミックス)

よかった

ザ・ファブル、ONE OUTS、ブルーピリオド、スピリットサークル、フットボールネーション、マージナル・オペレーション辺りは割と直近で再通読していた気がするので、読んでいないです。


それと、漫画ではないですが。

連休序盤に買うとすぐ尽きそうなので、終盤になってから買いました。


しかしまぁ、Kindle コミックやばいですね何も動かなくても無限にコンテンツ飛び込んでくるじゃん。YouTubeもだけど。

寝てるか暇つぶしをしているか、もっというと「寝るために暇つぶしをする」みたいな生き物と化していました。7連無。
FitBitの記録を見たら、平均睡眠時間(週間)が3月末の3倍程度になっていて、面白いなーと。
おかげさまで何も進捗がないですが、残された時間でちょっとだけリハビリをして、また社会に戻っていきたいです。


追記:

そーいえばコブラ結局読んでないなぁ

*1:年末から生活リズム狂っていたり、そのまま突入した2,3月からの4月がかなり手痛かったのが響いた

*2:kindleのライブラリで現時点でソートされている順

2018年度を振り返る

さぁ新しい節目、心機一転!!というタイミングでもないのだけれど。
やるなら年初だよね〜という気もしつつ、まぁ年末年始はブログだったり執筆だったり個人開発だったりにかまけていたので。「振り返ろ〜」というより、前に進ませようモードだったのでスルーしていた次第。

個人的には2018年度はとても苦しんだ・苦々しい時期が長かったように感じる。
そこで、自分自身を禊ぐという意味合いと現在位置を確認しようという狙いで、この1年の行動なんかを振り返ってみようと思った次第。
・・・年度末からずっと「やっておきたいな」と思っていたのが、3,4月は完全に何かを考える余裕がなく・自分自身にベクトルを向けて思考する気力がなかったので、この大型連休のタイミングまでずれ込んでしまった。

前置き

今の会社、自分に限らず「専門性が高いプレイヤーが堅いコアをベースに動いていく」というよりは、「上流に近い補佐だったりグロース周りの支援だったり」というところから「ディレクターと関わらないうなシステム改修・アーキテクチャ変更」までの広めな振れ幅の中で動くことが多い。
まだまだ「赤魔道士的なプレイヤー数名からなる集団」だったことが遠い過去でない、という事実ゆえか。

そういった面での流動性が高く、兵站をいじれるがゆえに1,2四半期でチーム分け(中身の移籍だけでなく、外殻ごと)を行うのがしょっちゅう。
実際に、「背負うべきミッション」「担わされる期待、方向性」というのがガラガラと変わっている印象がある。

とりわけ、ここ1年ちょっとは「ディレクターが増えた」「予算もつき、サービスのフェーズが変わった(このあたりの流れの本格化)」ことが手伝い、ふんわりした言い方だが、サービスについての「育て方」の捉え方が変わった気がする。その「新しさ」ゆえの試行錯誤があり、結果として「チーム体制がしょっちゅう変わる」。

そうすると、1つの「代表作」を生むような深化・連続性というのは追い求めづらく(1Qフルコミットしてても次の月からマインドの入れ替えが要求されるのだから)、「やったこと」としては雑多になりがちで、ややもすると「自分が何をしていたのか分かりづらい」。

「ああいうのもそれもこれも、いろいろやったね」というのは、自分自身としても「何をやったか」「やりきれたのか」「レベルが上がったか」というのが捉えづらく曇るので
だから「ちょっと整理してみようかな」と思ったのが、このエントリーを書いている理由でもある。
いち専門職サラリーマンとして、自分は何をしていたのかな・・的な。

これを、2018年度+そこに至る前日譚としてFY17-4Qから時期別に並べていってみようと思う。

2017-4Q

前半; DB構成変更(冗長化)対応

プロダクト的な大きい話としては、前例のない規模でのマスマーケティングを打って出たタイミング。TVCMなど。
それに備えて、DBの冗長化、master-replica構成への移行を行っていた。
インフラ側の対応はそもそもインフラエンジニアが1人しかないので、そしてアプリ側は自分が担っていた。
対象はCakePHP2製のWebアプリケーション2本と、CakePHP3製のWebアプリケーション1(+1)本*1
CakePHP3のそれは、当初は自分が中心的に、途中からは2名の中途採用者を招き入れて立ち上げ設計実装を行っていたもの。現時点ではサーバーサイドappのメインとなっているレポジトリ。

この「大きなpj」の主務として自分がアサインされた理由としては、PHP/CakePHPアプリケーションを最も書きなれているから〜という期待からだろうか、と思う。
大幅な障壁!!のような印象はあるし、実際に生み出した成果としては間違いなくでかいのだけれど。

が、結果としてコード的には大分シンプルになったはずで、なんというか「どこをどういじればすんなり行けそうか」という見極めの部分に最も力を割いた記憶がある。
「デカイことを最低限のコード量で」成し遂げるときというのは、ものすごい充足感を得る。
また、このレベルの「根本的な部分」の移行において、なにも障害やトラブルを招かずに成功させられたのも、ちょっとした自慢。

とても「Cakeぽい」コードになったと思うし、ちゃんと「自分のキャラクターと、そこに組織が期待している部分」に対してしっかり打ち返すことは出来ていたのではないだろうか。

きっと自分以外だと「この仕事」をできるのは社内に恐らく1,2人・・Cake2/3同時にかつ期間を絞ってやりきる!!みたいなとこまで求めたら、もう俺しかいませんよね!というのは確かだと思うし*2、単純に技術的なチャレンジがあったので、良いやりがいも得てはいた時期。

後半

それ以降は、4Qからの新チームの他のメンバーと一緒に粛々とIssueを回していた時期。
レガシーよりのアプリケーション(4,5年前からあるレポジトリ)とモバイルapp内コンテンツ用の素朴なwebviewサービスを扱う編成で、ディレクターに対してデータ分析文脈での支援を担ったり、biz職(サービスのオペレータなど)の作業効率化のためのモノなどをやったり。

もともとデータ分析系はTableauの導入を行ったりRedashを浸透させるためのアクションを打っていたりしていたので、というコンテキストがあっての役回りだろうか。
このQiita記事に繋がるような事をしてたのも、多分この時期かな?

RedashでのSankey Diagram、Sunburst Sequence Diagramの利用 - Qiita

2018-1Q

自分としては、データ周りの支援業務に比重をおいていったかな〜という記憶。

この時期に仕込んでいたネタがきっかけで勉強会への登壇などもさせていただいたり。

みんなが Redash を 気持ちよく使うやり方を 考える #redashmeetup - Speaker Deck

どうしてもデータは「長く見ている人・肌感や嗅覚の鋭い人」が強くなりがちで、他方でエンジニアやSQL慣れしている人だと力になりやすい部分〜というのも絶対にあるので、その辺りをお互いの力を合わせてできたら絶対に素敵!!という願望。

その他に、2017-3Qに取り組んでいた内容のアウトプットとしてCakeのプラグインを外に出したのもこの時期みたい。

GitHub - Connehito/cake-sentry: CakePHP plugin integration for Sentry

2018-2Q

チーム体制の変更・・実際には顔ぶれは(ほぼ)変わらなかったのだけど、前Qと担うミッションがやや変わった。「もっとココに注力していくぞ」という号令だ。

分析ソースの取り回しを効率化すべくETL的なタスクを行ったり。
具体的にはAWS Lambda駆動でGoogle BigQueryのデータをゴニョゴニョ->中間集計を行う、といった道具などを作った。
理想としては「テーブルがシンプルになったことによって、ディレクターが自身で手に負えるデータの世界が広がる」というものを描いていたが、そこまでの活用は進まなかった。
それよりも、寧ろ「データだしを依頼されて手を動かす」場面において、自分が圧倒的に楽になったという功績が大きいか。

引き続き「データ分回せる人を増やすと楽できそう」というモチベーションがあった時期で、例えば↓みたいな啓蒙などもしていた

https://speakerdeck.com/o0h/we-love-array-in-bigquery

この時期が最もRedashのクエリ組んだりしてたのかなー

mixpanel接続のためのQuery Runnerなどを書いていたのもこの時期。

GitHub - o0h/redash-mixpanel-query-runner: Redash's query-runner for mixpanel

また、プロダクトチーム全体をスコープとした啓蒙を見据えての取り組みも行い、そのアウトプットが↓

2018-3Q

ここが1番大きな組織変更。
「開発部」という物自体が解体されて、自分は「CTO室」となった。

諸々の事由により「CTO直下」の部隊が編成された形だが、特定のミッションに取り組むためのタスクフォース的な色が濃かった。

ここでもまた「Cake好きなやつ」役を期待されての配置だと思うのだが、具体的にはレガシー化していたバッチのスクラッチでのリプレイスや社内向けツールのリプレイスを担った。
このときに一緒に動いたappエンジニアが「主領域はJS」という人だったので、自分はPHPだし、よく言えば「お互いに背中は預けながらやりたいようにやってスピード上げる」みたいな布陣だった。
久々にCakePHP3に深く関わることができたかなーという時期。

主ミッションとは異なる文脈で、CI/CDの改善に取り組んでいた時期でもある。

コレ以外にもDockerfileのリストラだったり、PHP関連でのイメージ作成・コンテナ立ち上げの最適化なども。

あ〜〜あと執筆とかAdvent Calendarとか〜〜〜あった〜〜仕事じゃないけど〜〜

1人Advent最終日 - 大好き!にちようび

「PHPをやっていきましょう」みたいな本を書きました - 大好き!にちようび

2018-4Q

障害対応とかモニタリングとか

幸いにも致命的なダメージは及ぼしていないものの、3Qから全体的にサービストラブルや実装ミスが増えてきたなーという感覚があり。
とりわけ12月末に生じた1件がきっかけとなり、ちょっと組織の意識レベルや対応力を改善したいなーというふうに取り組み始めた。

もともと自分は「サービスがトラブってたら対応する」というのは積極的にやっていたのだけど。インシデント等の発生に対して8割くらいは自分が対応に関わっている気がする。
のだけど、それ自体が「もしかしたら悪だったのかもしれない」「これは、いわゆる老害的な行いに繋がってしまっていないだろうか」と、良く言えば気づきでありパラダイム・シフト、ただ控えめに言ってもショックを受けていたのがこの時期。

そのあたりの話

本ミッションとしては、3Qと引き続き「(一部の)レガシーの廃止」なのだけど、個人的なテーマとして強く感じ始めたという意味ではデカい話。

総括

色々とやっているような、そうでもないような〜という感じ。
なにか「自分の幅」というのは広がったのだろうか・・・?

基本的に、チームや周囲に及ぼせる影響・価値というのは「自分ができること」×「周囲の要求」だと思うので、
そういう意味では「出来ることを適用させながら、自分なりに背負うものや掘るべき部分を定める」という動き方にはなっていたはず。
ただ、ベースにあるのは「自分がこれをやることで、周りの人がきっと楽になる!or取り組めることのレベルが上がる!!」という確信を持てていると、やり甲斐だったり意義を感じるのかなーという感性。ざっくりと振り返ってみて、改めてそう思った。

残念ながら、ここに列挙した事柄の中には「自分はやるべくしてやったつもりだが、浸透しなかった・継続されていかない」という結果に落ちてしまったものも幾つもある。
そういうのはとても悲しいのだけど、人を動かすぞ!!!ってところまで持っていけるかどうか〜の話は、やはりハードルが俄然高かったりする。

器用貧乏!という方向性で力をつけていく = 凄い勢いで幅を広げていくには、「自分の資産を食いつぶしながら」動いているような感が強い。
その一方で、「幅を広げて武器を増やすぞ!!」というには、2018年度はあまりにも(業務以外の)余力を生み出せていなかった。
その結果として「何か得るものはあったのだろうか?」という不安はあるなー。

わがままに、何かを環境に求めていいのなら「自分の知識や経験が生きる、ただし全く同じことの繰り返しではなく、新しい要素があったりレイヤーが違ったりする」みたいなものを掴めたら、日々が刺激的になったりするのだろうか。

残した成果や生み出した価値として、「障害対応ちゃんとやりたい〜」系の話が2019-1Qの部門目標(中期注力ポイント)にまで認められる事になったので、コレは自分がプレゼンスを出せたから〜コレは要因はあるかもな〜といううぬぼれはある。
他方で、(とりわけ後半において)主務についての達成率が今までの自分と比べて最悪だったり、それなのに労働時間が長期化する傾向があったり、客観的に見ても遂行能力に疑問が残るような期間だった。こうなってはどうも自信も無くすし、相応の疲弊感が否めない。

2019年度は何か良いことがあるとよい・・・

力の活かし方という話、自分の好きな部分がCakePHPなので、「そこなら力になれる!」と胸を張って言いやすいな〜というものはあるのだけど。とは言え、未だ、「苦しんで覚えながら、新しいことを覚えて作ってみる!」というのも出来ないことはないと思う。その自分の苦労や努力の先に、しっかりと恩恵を受けて活き活きとしてくれる個人が居てくれさえすれば、きっと報われる。新しい事が出来るようになるのは、自分にとっては善だ。

「周りにいる人は何を大事にしているか」「どこにこだわっているか」みたいなのを感じ取れたら自分としても動きやすい。のだが、今年度もこれまで通りorこれまで以上に「やることがすぐ変わる」側面はあると思うので、どう振る舞ってどうアクセルを踏み込んでいくのが良いのかな〜

*1:2本なのだけど、片方は責務やアクセス量が少ないので気持ち的にはオマケ

*2:ただ、これ別に1人で全部やらなきゃいけないという必然性もないと思う