Masteries

技術的なことや仕事に関することを書いていきます.

「CI/CD活用事例&TIPS発表会」で「はてなにおけるGitHub Actions活用事例」という話をしました

techplay.jp

「CI/CD活用事例&TIPS発表会」という勉強会に参加させていただく機会を得まして, 「はてなにおけるGitHub Actions活用事例」という話をしました.

10分以上話す登壇が久々すぎて塩梅がわからず, 案の定資料が多くて若干駆け足になってしまいましたが, 社内のGitHub Actionsへの移行事例の様子やおもしろテクなど話させていただきました. ご参加頂いた皆様, ありがとうございました.

#プログラミング原体験

blog.utgw.net


※ 以下, 自分語りをしています.

プログラミングに興味を持ったのは, 根源をたどると幼稚園児の頃に父親が確かIBMのパソコンを買ったのがきっかけ... だった気がします. Windows 3.1が動いていて, 「A列車で行こう4」とかで遊んでいた記憶があります.

小学生になると, Windowsは95や98を使うようになっていて, 「Age of Empire」シリーズやRPGツクールのゲームで遊ぶようになっていました. そこから, 「こういうゲーム, 作ってみたいなあ...!」と思ったのが, プログラミングに関心を持ったきっかけでした.

中学校, 高校と, 引き続きそういった領域に対する興味は持っていたのだけれど, 自分の持ち前の悪い方向の怠惰さが影響してか, 実際にプログラミングを書いてみよう! 動かしてみよう! ということにはならなかったのですよね. RPGツクール2000を親に買ってもらって, ゲームを作ったりはしていたけれど(既存のゲームを参考に, オリジナルの戦闘システムとか作ろうとして頓挫するタイプの子供だった), そもそもとしてプログラミング言語を扱う環境を作る, というところで諦めてしまっていました(確か当時は適当に調べていたので, 「プログラミングするにはLinux? っていうやつがいるんでしょ? なんかめんどくさそう...」とか思っていた気がする. 今からすれば「四の五の言わず, やれや!!!」って感じなのだけれど...).

...後は, プログラミングには興味を持ったものの, なんというか, 「興味」で留まっていて, 「具体的な夢」にはなっていなかったので, とりあえずいろいろやってみよう! の精神があったのかもしれません. ということで, 高校まではそういう感じで, 割と普通な(そして若干オタクな)学生として過ごしていました.


というわけで, 本格的にプログラミングを始めたのは大学に入ってからでした. 結局, 高校までの時間を過ごして「(職に繋がりそうな方向性で)やってみたいな」と思えたのがプログラミング(情報科学)だけだったので, 指定校推薦で関西学院大学の情報科学科に入り(当時の成績かつ関関同立の情報系学部で行けるのがここしかなかった!), 講義でC言語を触ったのがちゃんとした(?)プログラミング体験の第一歩でした. 「自分の書いたコードが動く」というのがとにかく最高の体験で, 授業はめちゃくちゃ楽しかったのを今でも覚えています.

...というわけで, 「#プログラミング原体験」の最初のエントリを書いた id:utgwkk さん達みたいに, 小学校や中学校など, 幼い頃からプログラミングをしてこなかった... というのは, 割と自分の中ではコンプレックスというか, 「みんなちゃんと経験積んでいて凄いな」とか, 「ショボくてすいません...」みたいな気持ちを時折呼び起こすのですよね... まあ逆に言えば, 大学からプログラミングを始めたような自分でも, 今なんとかコードを書いてメシを食えているので, 「大学からプログラミング始めたんすよね...」という人も「まあなんとかなるぞ!」と言えるのかな... と思っています.

話を戻して... 通常研究室配属は4年のところ, 一部学生は3年から仮配属が出来る, という制度があったので, 講義が面白かった教授(石浦 菜岐佐教授)のところに配属してもらいました. そこで出会ったのがPerlです. 授業ではC言語など, 型がある世界でコードを書いていたところ, Perlの型のない世界が逆に斬新で, ハマりました. なんというか自由さを感じたんですかね...? あとはシュッと書いてシュッと動く, という体験が良かったのかもしれません.

研究室でPerlを使ってあれこれ研究しつつ, 趣味でCGIを使ってTwitterクライアントを書いたり(まさに自分もprint "Content-Type: text/html\n\n"とか書いてた!), 友達が遊んでいたブラウザゲームのデータを分析するツールを作ったり... いろいろコードを書いていた気がします. そういえば, PlackやAmon2と出会った時に, 「えっ, こんなに簡単にウェブサービスが書けるの!?」って感動した記憶がありますね.

...今にして思うと, ここでRubyやPythonと出会っていたら, 多分自分の人生は大きく変わっていたのではないかなー, と思います. 多分はてなに入る事もなかったのではないか. 一方で, 自分はPerlと, Perlを通じて知り合った人たちと出会えて本当に良かったと思っていて, そういう意味で石浦教授は最高の恩師だと思っています.

後はなんやかんやあって修士まで石浦研究室でお世話になり, その間にKansai.pm/Kyoto.pmやYAPC::Asiaに参加したり, Perl入学式を立ち上げたりしてから, なんとなく就職して, 今に至る... っていう感じです.


改めて振り返ってみると, やっぱり自分は「動くもの(Webサービスとか...)を作る」というのが好きなのかな... っていう感じがします. だからコードを書くのは超楽しいし, 「チームで」サービスを作るための道具(?)として, アジャイルやスクラムとかにも関心を持てたのかな..? という気がします. id:onishi の「手を動かした者だけが世界を変える」の通り, これからも様々な形で手を動かしながら, Webサービス開発に携わっていきたいな, って改めて思いました.

「吉祥寺.pm 25」でmisspellについて話しました

kichijojipm.connpass.com

「Kichijoji.pm 25」で, misspellというツールについて話しました.

github.com

実のところこのツール, 先週くらいに知ったのですが, 「めっちゃ便利やん!」となり, 今業務で触っているツールに勢いよく適用してミススペル(typo)を撲滅, 更にreviewdog/action-misspellを導入して, 自動的に指摘してくれるようにしたりしていました.

ちなみに, reviewdog/action-misspellを含む, CI/CD関連のTIPSについて, 来週TECH PLAYのイベントで話すことになりました. 興味ある方はこちらもぜひ. 業務でやったGitHub Actions化や, GitHub Actionsを使った便利な自動化などのTIPSについて話す, 予定です.

techplay.jp

小ネタ: Perlで関数の返り値の一部を無視する

例えば, func という関数があって, これが次のような実装になっていて, 3つの返り値を返すとします.

sub func {
    ...
    return ($x, $y, $z);
}

func を呼び出す際, 「返り値の1つ目と3つ目は利用するけれど, 2つ目は利用しない」という時は, undefを使って次のように書けます:

my ($x, undef, $z) = func();

ここでのundefは, Go言語におけるアンダースコア変数みたいなもの... と捉えると良さそうです.

x, _, z := func()

myundef組み合わせるの, 実は未定義動作だったりしないかな...?」と一瞬思ったのですが, perldocでも,

perldoc.jp

my ($x, $y, undef, $z) = foo(); # Ignore third value returned

...という形で紹介されているので, 普通に使える小技(?)と思って良さそうです.

不必要な変数は宣言しないに越したことはない(例えば2つ目の返り値を, 使わないのに$yとして定義すると, 後で$yはどこで使っているのだろう...? と混乱してしまう)ので, 使えるシーンがあれば積極的に使っていきたいところですね.

今だからこそ「リモートワークの達人」読んだ

昨今このような情勢で, そろそろ1年近く在宅で勤務しているので, 今あらためて「リモートワークの達人」を読んでみました.

読書メモ

- 毎日4時間はみんな同じ時間に働いたほうがいい
- 週に一度「最近やっていること」というテーマで話し合いの場を設けるとよい
-- 1週間でやったこと, 翌週やることを手短に書き込む
-- 作業の調整は不要で, 一緒にやっているという感覚を持てると良い
- リモートワーカーが孤独になりやすいのは事実. だから意識的に外に出た方がいい
- リモートワークにおいては, 働かないより働きすぎる方を心配するべき
-- 気がついた時には完全に燃え尽きている可能性がある
- リモートワークをうまくやるには?
-- こまめに成果を見せる
-- いつでも連絡が取れるようにする
- リモートワークでは, オフィスで働く以上に人の繋がりが重要
-- 文字だけでやり取りする時, 人は悪い方に流されやすくなる
-- 前向きな人間を集め, チームメンバーを思いやり雰囲気を盛り上げるタイプの人が必要
- 「嫌な言葉」, 「感情的な対立」, 「悪いムード」を徹底的に排除していくことが大切
- メールやチャットや掲示板で話し合いをするので, リモートワークには文章力が欠かせない
-- 採用するなら, 判定基準に入れた方が良い
-- 文章がうまくなる方法は読むこと. 文体は二の次, まずは明晰さ
- 2ヶ月に1度のペースで1on1を実施する. 毎月出来るといいが, 2ヶ月でうまくまわっている
-- ゆるく話をする. やる気は脆いので, ちょっとした不満で仕事が進まなくなる. 1on1で定期的にチェックする
- リモートで働いていて, 一向に手が動かないと思ったら注意信号
-- 今の仕事の問題点を明らかにして, 改善する必要がある

感想/考察

週に一度「最近やっていること」というテーマで話し合いの場を設けるとよいというのは, 異動前のチームで「成果発表会」という催しがあり, 1ヶ月単位でやったことや所感などを共有して, フィードバックをしあっていたので, 割と良かったので納得度がありました. 今のチームはチームの人数が多いこともあってそういった催しはないのですが, 人数が多くてもやれる良い方法はありそう, と思ったので模索していきたいですね.

「リモートワークでうまく仕事をするには?」のところで, コツとして「こまめに成果を見せる」, 「いつでも連絡を取れるようにする(反応する)」というのが書かれていて, これは最近意識していることなので裏付け(?)が得られた気持ちになりました. こういう振る舞いが安定して出来ると, 信頼貯金を貯めやすくなるように思います.

あとは, (「あわせてよみたい」で紹介しているshibayuさんのエントリでも触れられていますが)「嫌な言葉」, 「感情的な対立」, 「悪いムード」を徹底的に排除していくことが大切というのは本当にそうですね. オフィスで働いている時より, リモートワークの方がそういった状態に陥った時のリカバリーコストが高い気がしているので, そうならないように割れ窓理論的に先手打って対応していくのが大事そう, と思いました. チームでは割とシニア寄りなので, そういったところ俯瞰して気付けるようになれると良さそうです.

元々, 京都/東京という2拠点で仕事をしていたこともあって, 昨今のコロナ禍で在宅勤務になっても, 割とスムーズに移行できたのではないかと思っています. うまいことやっていくための暗黙知? みたいなものを, この本を通して改めて文章化できたなーと思います.

あわせてよみたい

blog.shibayu36.org