Slide 1

Slide 1 text

ソフトウェア開発と私 2018-06-30 ハッカーズチャンプルー2018 motemen

Slide 2

Slide 2 text

こんにちは ● id:motemen / @motemen(美顔器) ● 株式会社はてな CTO ● Perl, Go, Git

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

CTO & アプリケーションエンジニア ● 2016-現在 ● 組織・技術・情報 ● 古めのサービス全般

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

CTO室 ● 事業や開発の新しい基盤をつくる横断チーム ● 社内横断で開発効率を上げる取り組み #pepabohatena

Slide 8

Slide 8 text

サマーインターン

Slide 9

Slide 9 text

宣伝終わり

Slide 10

Slide 10 text

アジェンダ ● 自己紹介(40min)

Slide 11

Slide 11 text

エンジニア遍歴

Slide 12

Slide 12 text

199X

Slide 13

Slide 13 text

BASIC ● 本当はゲームを作りたかった(らしい) ● 学校の宿題のドリルを解くプログラム ○ 完成したころには次の単元だった

Slide 14

Slide 14 text

200X

Slide 15

Slide 15 text

Windows ● Visual Basic 5 ● ランチャー、ジョークソフト

Slide 16

Slide 16 text

ホームページ ● BBS(掲示板)置いてたけど、友達だけだった ● 本屋で立ち読みした情報をコピペした技術サイト

Slide 17

Slide 17 text

Perl との出会い(と別れ) ● Perl Poetry(Perl 詩)

Slide 18

Slide 18 text

2005

Slide 19

Slide 19 text

ブログブーム ● 考えたこと、やったことがアイデンティティになる時代 ● Movable Type ● blosxom: 1 ファイルの CGI ○ 1ファイル = 1エントリ ○ プラグイン = .pl ファイル

Slide 20

Slide 20 text

Web 2.0 ● RSS, XML, JavaScript, Ajax ● サイトがつながって、面白いものを生み出す ● ウェブの人はスピード感が違った

Slide 21

Slide 21 text

jsBlogTimes ● Movable Type のプラグイン MTBlogTimes ● の一般化実装 RSSBlogTimes の JavaScript 実装 ● サーバサイドがわからなかった

Slide 22

Slide 22 text

はじめてのトラックバック ● いわゆるメンション ● 相当躊躇した上、送信 ● その後 mixi でメッセージが来る

Slide 23

Slide 23 text

はじめての登壇 ● Shibuya.js ライトニングトーク ○ LT って何? 登壇ってなに? って状態 ● コミュニケーションできる人がたくさんいてビビった

Slide 24

Slide 24 text

アルバイト ● あまりに怠惰すぎて月給1万円なんてこともあった ● 夏休み、インターンとして集中開発したところ、楽しい ● 大学院を中退して、はてなに就職

Slide 25

Slide 25 text

2008

Slide 26

Slide 26 text

就職 ● 余談: 月給を貰うようになって、モチベーションが低下 ○ とにかく他人に認められたかった自分に気づく ○ おれのモチベーションはそんなものか!?

Slide 27

Slide 27 text

うごメモはてな ● 任天堂との協業で開発したウェブサービス ● 自分のプロダクト、という思いが強かった ● ぼくのかんがえるカッコイイコードをガシガシ書く

Slide 28

Slide 28 text

異動後 ● 自分のコードで同僚が苦しんでる姿を見て、辛かった ● 急速に他人を意識したコードを書くようになった ● プログラミングからソフトウェア開発へ

Slide 29

Slide 29 text

登壇(失敗) ● 先輩から LT を打診され、受ける ● よく考えたら人前で話すのは苦手 ● 当日の零時くらいまで準備できず、本番はぐだぐだ ● その後数年間登壇できなかった

Slide 30

Slide 30 text

YAPC::Asia ● Yet Another Perl Conference ● 今なら builderscon とか YAPC::Okinawa とか ● Perl に限らない、ウェブ開発者のお祭り ● 同僚がこぞって参加して、楽しそうだった ● 自分もやっぱり登壇したい

Slide 31

Slide 31 text

2011

Slide 32

Slide 32 text

YAPC::Asia Tokyo 登壇 ● ニコニコ動画のプレイリストを mp3 ストリーミング ● ffmpeg + AnyEvent によるイベント駆動プログラミング ● 懇親会ぼっちも回避できた

Slide 33

Slide 33 text

何をサブミットするか ● “たぶんこれはトークの応募の際の説明とかがだめだったんだ ろうなと予想!” * ← 図星 ● 内心、落ちたらいいな、とか思ってた ● 受け身はやめる、やるならちゃんとやるように *: http://unknownplace.org/memo/2011/10/17/1/

Slide 34

Slide 34 text

App::htmlcat ● ターミナル上のハイライトをブラウザに表示したかった ○ 長い長い git log -p とか ● 当時流行りの AnyEvent と Server-Sent Events を使って リアルタイム化 ● 標準入力をブラウザで tail -f できる htmlcat というのを書い た

Slide 35

Slide 35 text

webtail ● 同コンセプトの Ruby 実装 ● こっちのほうが人気があった… なぜ? ○ カスタマイズ性 ○ Ruby 製 ● パッケージング重要

Slide 36

Slide 36 text

2014

Slide 37

Slide 37 text

Mackerel ● プロジェクトマネージャ的なポジションに ● Scala + Go ● Go 言語が異様に手に馴染んだ

Slide 38

Slide 38 text

ghq ● リポジトリを URL に基づいた階層でクローン・整理する ● Go の練習に ● peco と組み合わせると便利、と話題に(ラッキー) ● ghq: リモートリポジトリのローカルクローンをシンプルに管理 する

Slide 39

Slide 39 text

ghq: インタフェースの変更 ● もともとは zsh スクリプト ○ cd をいい感じにハンドルしたかった ● ツリー構造は Go 風に変更

Slide 40

Slide 40 text

フィードバック ● これは便利! と思ってた機能が不評 ● 同僚にもこの機能いらんでしょと言われた https://twitter.com/miyagawa/status/480950493837926403

Slide 41

Slide 41 text

gore ● mackerel-agent の公開 API の変更を追いたかった ○ 学んだこと: Go による Go プログラムの操作 ● REPL が作れそうだったのでやったらできた ○ go run ○ コンパイル時にエラーになるコードを除く ● コード補完もできる Go の REPL「gore」を作った

Slide 42

Slide 42 text

● ようやく自信を持って発表できた感覚 ● はじめての登壇から10年近く経っていた……

Slide 43

Slide 43 text

CTO としての仕事 ● メカニズム ○ ソフトウェア ○ 人々の how を変える ● メッセージ ○ 言葉 ○ 人々の why を変える

Slide 44

Slide 44 text

教訓

Slide 45

Slide 45 text

「できること」と「やりたいこと」は両輪 ● やりたいことがあれば、できることは付いてくる ● できることが増えれば、やりたいことも広がっていく

Slide 46

Slide 46 text

書くことと話すこと ● 知識や考えや経験を直列化する試み ● 自分にとっては一種のセーブポイント ● 吐き出したら忘れて、新しいことをする

Slide 47

Slide 47 text

自分の小さい世界を変える ● エンジニアの大それた夢 = 世界を変える ● いきなり挑むには世界は広い ● 自分と、自分の周囲を変えることはいつでもできる

Slide 48

Slide 48 text

自分のため、からはじめよう