さいどうにっき

趣味や日常などを不定期で書いていきます

面倒なことはlinterにやらせよう

OB枠のコーヤ・ロードアゲイン(@ringoh72)です。

昨日のアドベントカレンダーはかかおくんでした。 軽く探したけどリンク見つからなかったのでそのうち貼ります。 // FIXME: ここに後で埋め込む

お前誰?

情報システム工学科10期生、OB枠のコーヤ・ロードアゲイン(@ringoh72)です。本名です。 りんぱんまんの兄を20年ほどしています。 10期生では一番後輩に構ってもらっていた人です。

5年のときに構ってもらっていた14期生もついに3年生、弟に至ってはもう卒業する学年だということを思い出し、時の流れの速さを実感しています。

卒業してからは、東京で色々なオタクをやる傍らエンジニアとして働いています。

最近にじさんじのライブに行ったらアリーナの真ん中前列でした。死んで蘇りました。

ところで主に2人ほどオタクにアドバイスしたのですが、東京23区ほどオタクをやるのに適した地域はありません。

  1. コミケの開催地である東京ビッグサイト、オタク街の秋葉原や池袋、どちらにもアクセスが容易です。
  2. TOKYO MXが映ります。リアタイできないことに怯える生活はもう来ません。
  3. Twitterでトレンド入りする「設営完了」を見てから準備して買いに行けます。
  4. 電車や飛行機へのアクセスも良く、気軽に遠征できます。

閑話休題

今回はlinterで楽しようぜという話をします

はじめに

在学中、こんなコードをとあるテストの解答でよく目にしました。 僕はこのテスト受けてませんけど。

for(i=0;i<10;i++){
    printf("%d\n",i);
}

往々にしてこういったコードは「空白が足りない」という攻撃を受けてあえなく減点されてしまいますが、これはテストという取り返しのつかない場だからこそ起こってしまう問題です。

実際のコードだと、(時間や能力の都合はありますが)理論上は100点を取るまでコンティニューできますよね。 とはいえ自分で直したりそれを意識したコードを書くのって面倒です。あなたもそう思いませんか?

ところで今の時代にはlinterという便利なものがあり、小手先のコードスタイル程度なら勝手に100点を取らせてくれます。 いやはや良い時代に生まれたものです。

ツールに頼るのが甘えという考え方は石を叩いて武器を作っていた時代に置いていきます。 今は洗濯板と桶ではなく、全自動洗濯機を使う時代です。 面倒なことはlinterにやらせよう。

linterとはなんぞや

あえて語弊を恐れずに言うと 「AIってやつでコードを良くしてくれるツール」 です。

とはいえいわゆる ましんらあにんぐ ではありません。 あいつらただのマクロでもAIって言うし

もうちょっと踏み込んだ話をすると、 「コードを静的解析*1して、ルール違反の箇所を検知・修正*2するツール」 です。 先程のコードの場合、空白が足りない箇所を検知して自動で直してくれます。

それだけでなく、「実はこのコード無限ループするんじゃない?」みたいなことも教えてくれます。 例えばこんなコードはアウトです。

char i;
for (i = 0; i < 256; i++) {
    // 255からオーバーフローして0に戻るので無限ループする
    printf("%d\n", i);
}

かしこい。

細かい定義はWikipediaを見てください。

ともかく、linterを使うことで面倒なコードスタイルの指摘から解放されます! だってlinterがやって直してくれるから!

ちなみにここから先は主にJSのlinterであるeslintの話をしますが、よく使われる言語の場合基本的にlinterがあると考えていいと思います。

linterのルールを設定しよう

ルールを設定するのは誰か

linterを使う上で最も忘れてはいけないことが一つあります。

ルールを設定するのは人間である

という点です。

linterにおいて、真逆のルールからどちらかを選ぶことは珍しくありません。

例えばeslintにはsemiというルールがあり、セミコロンの有無を設定できます*3。 この選択肢には「常につける」「常につけない」の両方があるのです。 実際のところセミコロンの有無によって些細な違いはあります*4が、ルールを決めるのはあくまで人間です。

linterはあくまで「ルールに基づいて動く」ツールで、ルールを決めることは人間の責務です。 どのようなルールにするのか、チームのみんな(もしくは俺の中の俺)と話し合って決めてください。

linterおすすめの提供するルールを使おう

なにジョジョ? ルールを決めるのが面倒? ジョジョ、それは全部自力で作ろうとするからだよ。 逆に考えるんだ、「linterに支配されちゃってもいいさ」と考えるんだ。

eslintは全部で294ものルールがあります。 その上モダンなコードを書こうとすると欲しいプラグインが増えて、ルールもどんどん増えていきます。 全部設定するの辛いです。というか無理です。

でも大丈夫! linterには予めルールが設定されていたり、おすすめのルール一覧を提供してくれたりすることが多いです。 要はスターターパックですね。 たとえばeslintは、 eslint:recommended というスターターパックを提供しています。

でも気に入らないルールがあったら? その時は変えてしまえばいいのです。 ルールの変更はあっても構いません。 かのソクラテスが遺した「悪法もまた法なり」という言葉がありますが、今の我々は悪法を変える力があります。

自分たちのルールは自分たちで決められる、なんともデモクラシィを感じさせる良いツールです。 実際のところ「大まかな流れはスターターパックに任せて細部だけ編集する」というのがよくある設定だと思います。

linterを自動実行しよう

さて、ここまでlinterそのものについて書いてきましたが、ここからはちょっと視野を広げます。

linterという革命的なツールを知ってしまった今、commitごと、いえ1タイプごとに実行したくなっている頃だと思います。 しかしホモ・サピエンスというのはサボり癖という致命的な欠陥を抱えていて、「masterにマージするまでlinter実行してない」ということは十分起こりえるのです。 僕はやりました。

というか「面倒なことはlinterにやらせよう」なのに、面倒なlinterの実行を残していては話になりません。 ここでは「システム的に実行させる」こと2つの手段を紹介します。

エディタに実行してもらう

例えば僕はvscodeを主に使っているのですが、vscode-eslintというプラグインには非常に助けられています。 ルール違反の箇所がエディタ上で見えて、どのルールに違反したのかも見ることができます。

f:id:ringoh72:20191225231726p:plain
=の前後に空白がない場合の表示

またセーブすると自動で修正してくれるよう設定しているため、コードスタイルを考えずにコードを書いても保存するだけでキレイになります。

CIで実行する

githubなどへのpushに紐付いてビルドやテストを行える仕組みをCIと言います。 最近だとGitHub ActionsCircleCIが主でしょうか。

これらでlinterを実行することにより、開発者の環境に頼らずに自動実行する仕組みが整います。 CIのステータスをPull Requestと紐付けることで、linterが通るまでマージさせないようにすることも可能です。

理由は後述しますが、CIで実行する場合はルール違反の検知のみに留めて修正させないのが吉です。

どちらが良いのか?

両方やりましょう。

一応CIに編集権限を持たせるとローカルでの修正はいらなくなりますが、本当にやめた方がいいです。 編集権限を与えるのは面倒ですし、コードの編集結果に責任を持つのがcommit authorではなくCIの設定管理者になりますから。 現場猫も草葉の陰で泣いてしまうでしょう。

責任を押し付けたい気持ちはめちゃめちゃよく分かりますが、どうかこらえてください。 何も責任という言葉は悪いことだけでなく、功績も合わせて表裏一体です。 「このキレイなコードを書いたのは自分です」という証明のためにも、commitは自分でしましょう。

3行まとめ

  1. CIはコードルールの警察
  2. ルールを設定するのは人間だけど、膨大過ぎる場合はスターターパックに頼ろう
  3. 人間は実行を忘れる生き物なので、エディタのプラグインやCIを活用して自動実行しよう

おまけ

先輩がいる場所(主に東京)に来たらガンガン先輩にたかりましょう。 どうせ暇なので相手してくれますし、大抵あなた方より稼いでるのでご飯も奢ってくれます。 断られたらおとなしく引いて欲しいけど、多分快諾してくれると思います。多分。

そして卒業したら、今度は快くたかられてくれるといいな、と僕は思っています。

たかられたくない人は…まあ、ごめんね。許して。

*1:コードを実行せずに解析すること

*2:全てのlinterが自動修正を備えているわけではありません、あしからず

*3:JSではセミコロンがあってもなくてもokです

*4:詳しくは「JS セミコロン」とかでググってください

就職が心配されてなかった話

はじめに

この記事はICT Advent Calendar 2018の22日目の記事です。

こんばんは、コーヤです。技術強強な面白い先輩らしいです。え〜ほんとにござるかぁ〜? ちなみに事前知識として、教授や一部同級生、先輩方は僕のことを「級長」と呼んでいます。

昨日は神と呼ばれていたmitoでした。

mitoavadn.hatenablog.com

また、今日はがちゃみんも記事を書いています。

gatyaminch.hatenadiary.jp

即行動したのが幸いし、無事平ジェネのネタバレを回避しました。ライダー好きみんな見て。

就職を目指した話

就職の理由を聞かれたら「遊ぶ金欲しさ」と答えることにしている。 いくつか複合ではあるけれど、一番大きな理由がそれだからだ。

オタクをやるには金がかかる。 以前コミケの予算を多めに見積もったら、使い果たした末買えないものすら出てきた。嘘だろ。 金を使う界隈に足を突っ込んだのが悪いとか言わないで。

まあそんなこんなで、僕は就職を目指すこととなった。

企業選びの基準の話

  • 東京で働けること
  • ホワイトであること

あまり細かくは考えなかった。アホかこいつ。 とはいえ単純だったおかげでYes/Noは考えやすかった。

就職エージェントの方が企業との連絡を受け持ってくれたり、アドバイスをくれたりと面倒を見てくれたのは本当に大きい。本当にありがとうございます。

結果だけ述べると、モバイルファクトリーという会社に就職した。 東京で働けるしマジにホワイトだし、大成功と言えるだろう。

就職してからの話

ざっくり言うと超楽しかった。

定時退社してゲーセン行くも良し、VTuberの配信を見るも良し、勉強会に行くも良し。 まさに充実した生活を送っていると言えるだろう。部屋が汚い以外は。

業務でめちゃめちゃ楽しいプロダクトに関われたことも大きいけれど、楽観的な性格が功を奏したのかなと振り返って思う。

当時は毎日のように「退社ァ!」とツイートしては教授がふぁぼるのを面白がっていた。 知っている人はどれくらいいるのだろうか、僕が在学中、教授はきっき先輩の社食ツイートをふぁぼっては「またきっきが飯テロしてる」と言っていた。 同じように、僕のツイートも「また級長が退社してる」とか言ってるんだろうなと勝手に想像していた訳だ。

ちなみにこれは伏線になる。

教授がみんなを心配していた話

いつだかの飲み会で、教授がみんなを心配していたことが分かった。 その時は10期生だけの話をしていたけれど、多分これまでもやっていて、これからも続けていくのだろうと思う。

個人情報は伏せるが、「○○はどれくらいで病むと思ってた」「○○はこうなるのが分かってて裏でフォローしてた」などなど話は尽きない。 なんだこの教員超人か?

教授に心配されてなかった話

さて、そういう話を聞きつつも自分のことには一切触れられないので、「もしかして心配されてなかったのか?だったら凄いな」と考えるようになってきた。 心配して欲しかったという訳ではなくて、安定と思われていたならむしろ美点だと思っていた。

「全然心配してなかった人っているんですか?」
「え?級長」

なるほどね。全て理解した。

「でも完全に気にしてなかった訳でもないよ。退社ツイートふぁぼってるでしょ?あれは『ちゃんと見てるよ』っていうアピール」
「そんなつもりだったんですかwwwwwwwww」

面白すぎるだろ、ありがたい限りだけど。

おわりに

心配されないのは良いことだったけれど、心配されることは決して悪くない。 正直なところ僕はたまたま運が良かっただけで、心配する要素だけ探せばいくらでもあるはずだ。 下手に気丈に振る舞うよりも、ちゃんとヤバいものはヤバいと認識できることが人生には必要だと思う。

うわあめっちゃ老害だ。

東京で働くと勉強会めっちゃあるしゲーセン多いし仕事帰りにアキバ行けるよ。 先輩方も多いから会おうと思えばいくらでも会えるよ。 みんな東京においでよ

オフ会3部作完結編「そして東京へ」

この記事はKosen13s' Advent Calendar 2018の記事です

adventar.org

前回までのあらすじ

去年は「みんなもっとオフ会やろうぜ」という話を書いていた。

roadagain.hatenablog.com

一昨年だった。去年は「今年オフ会できなかったけど来年はいっぱいやるぜ!」という話だった。

roadagain.hatenablog.com

そして卒業・就職を期に状況した僕は、果たしてオフ会の開催・参加を達成したのである!

なんか意図せずして3部作になったな…

行ったオフ会

  • nomi-tokyo3,4回くらい
  • 高専カンファ
  • 13s' LT会
  • その他いくつか

振り返ると、ざっくり月に1回くらいは何かしらのオフ会に出ていた。 nomi-tokyoの一部やLT会では主催をやったりしたため、オフ会の開催促進にも一役買ったはず。たぶん。

オフ会の促進について

13s'のslackでnomi-tokyoチャンネルが切られたのは非常に都合が良かった。 元々は「東京の飲み会頻発するから別で切ろうぜ」くらいの感覚だったが、切った後は13s'で最も活発なチャンネルになっていった。 直近ではsaboriに追い抜かれたけど

専用に切ったことで地方勢への荒らし状態を回避しつつ都合をつけやすくなった。 もしかすると、人をある程度絞ってしまうのは効果的なのかもしれない。

とはいえ第1回オフ会のような全国規模のものは開催されておらず、今後はそれを目指していくことになりそうだ。

俺たちの戦いはこれからだ!

らりょすとごはんたべた

この記事はらりょす Advent Calendar20日目の記事です。

それはある冬の日のことだった。

就活のため東京に出向くことになった僕は、せっかくだし誰かと食事でも行きたいと思ったのである。

「○日~✕日まで就活で東京にいるので、誰かご飯食べませんか」 と、何を血迷ったかtwitterではなくfacebookに投稿した。

そこでらりょすが声をかけてくれて、2人で昼食を食べに行くことになる。打ち合わせ中にバレンタインの収穫投げて心抉ってきたの許さんからな

待ち合わせは渋谷駅、いわゆるハチ公前である。なんたる都会人!と胸を躍らせながら意気揚々と渋谷駅に向かう訳だが…

迷った。

気付いたら全然別の出口にいるし、道戻ったはずなのに同じ場所に出るし、明らかに結界が張られている。

こちらに来てくれるというらりょすの提案も「俺はハチ公が見たい」で押し通したが、やはり結界は抜けられない。

流石にこれ以上彼を待たせるわけにはいかない。諦めて結界の外からぐるっと回って向かうことにした。 初めて見たハチ公は普通の像だった。

さてどこに行くかと考えていたら、彼がいい店を知っているという。 せっかくの機会なので連れて行ってもらおう。

彼が教えてくれたのは「生粋」とい店である。これで「なまいき」と読む。

https://goo.gl/maps/yj5t7UQphNo

おすすめされたのは鶏カツ。 半生のカツに生卵を絡めて食べる。 めちゃ美味しかった。

食べながらお互いの高専がどうのこうのと話をするのだが、確か卒研とか進路の話をしていた。気の緩む食事の場でも普段より意識フライハイだったのは2人が受けていたストレス故だったのだろうか。

そんなこんなで食べ終わって会計を済ませ、そのまま解散した。

ご飯やらお吸い物やらもあるのでもちろんお安いはずがなく、それなりの値段ではあったが、時期が時期だけに心を大いに潤してくれた。また行きたい。

そして何より、ご飯に誘ってくれたらりょすに圧倒的感謝🙏🙏🙏である。ありがとう。

オフ会当日は来ない

はじめに

この記事はkosen13s' Advent Calendar 11日目の記事です。 大遅刻したけど許してください。

adventar.org

ふりかえり

roadagain.hatenablog.com

だいたい1年位前、僕はこの記事で「オフ会最高だからみんなもやろうぜ!」という内容のまとめを書きました。 それからの1年間、発言した本人はどんなオフ会に参加してきたのだろうか。

f:id:ringoh72:20171215235507p:plain

え~、1年くらい経ったんですけども、参加は、何一つ、できませんでした… なーにが足りなかったんでしょうかね~…

なぜオフ会に参加できないのか

遠い。ひたすら遠い。 足りないどころか多すぎ。

なにせ沖縄は遠く離れた僻地である。他県からすれば行くも招くも不便極まりない。 去年オフ会に参加できたのは本当に運が良かったとしか言いようがない。

もちろん同じ学校にいる13s'のメンバーは毎日のように会うが、そんなものは到底オフ会とは呼べないのだ。

Hopes and Dreams

この1年歯がゆい思いをしてきたが、そこからようやく解放されようとしている。

僕は来年度から東京で働くのだ。 交通の便も非常によく、人も集まるのであればオフ会やりたい放題と言ってもいいのではないだろうか。

上京した暁には絶対にオフ会を開きたい所存である。

さいごに

関係ないけどアンテはいいぞ

store.steampowered.com

止まるんじゃねぇぞ…💃

ライド:「なんか静かですね。街の中にはマサカリランチャーもいないしプロコンとはえらい違いだ。」
オルガ:「ああ。審査員の戦力は軒並み向こうに回してんのかもな。」
ライド:「まっそんなのもう関係ないですけどね!」
オルガ:「上機嫌だな。」
ライド:「そりゃそうですよ!みんな助かるし、りしも頑張ってたし、俺も頑張らないと!」
オルガ:「ああ。(そうだ。俺たちが今まで積み上げてきたもんは全部無駄じゃなかった。これからも俺たちが立ち止まらないかぎり道は続く)」
チャド:「ぐわっ!」
ライド:「団長?何やってんだよ?団長!」
オルガ:「ぐっ!うおおおおおおおお!!」パンパンパン
暗殺者:「うおっ!あっ!」
オルガ:「ハァハァ…。なんだよ、結構当たんじゃねぇか…」
ライド:「だ…団長…あっ…あぁ…!」
オルガ:「なんて声、出してやがる…Ride on!」
ライド:「だって…だって…!」
オルガ:「俺はICT委員会鉄華団団長オルガ・イツカだぞ。こんくれぇなんてこたぁねぇ。」
ライド:「そんな…俺なんかのために…」
オルガ:「団員を守んのは俺の仕事だ。」
ライド:「でも!」
オルガ:「いいから行くぞ。皆が待ってんだ。それに…」
オルガ:「(ミカ、やっと分かったんだ。俺たちにはたどりつく場所なんていらねぇ。ただ進み続けるだけでいい。止まんねぇかぎり、道は続く)」

三日月:「謝ったら許さない。」
オルガ:「ああ分かってる。」

オルガ:「俺は止まんねぇからよ、お前らが止まんねぇかぎり、その先に俺はいるぞ!だからよ、止まるんじゃねぇぞ…💃」

三日月:「オルガ?」

鉄血のオルフェンズ 第48話 約束 - ガンダムストーリー全セリフまとめの文面を改変


りしのママ化、みんなが頭使えば少し進行を遅らせることができる気がする

はじめに

これは ICTアドベントカレンダー2017 2日目の記事です。

先輩がいなくなる問題をどうするか

先輩がいなくなる、それは学校である以上決して避けられない問題である。 先輩だってもちろん進級するし、卒業していく。 あと企業に引き抜かれたり退学したりする

優れた技術を持った先輩がいなくなるのは、残された後輩からすると大きな損失にほかならない。

この問題に立ち向かうための手段として、

  • 卒業しても先輩を頼れるシステムを作る
  • 先輩に頼らなくてもいいように後輩を育てる

の2つがある。

卒業しても先輩を頼れるシステム

ICT委員会では連絡ツールとしてslackが導入されている。 そこには既に卒業した先輩も数多く残っているため、適当なチャンネルで質問を投げかければ答えてくれたりする。

とはいえ、先輩も学業なり仕事があるし、在校生が答えることが多いため、「卒業生に頼る方法」としてはそこまで使えない。

後輩育成

TSURAI

メリットとしては先輩に頼らなくてもよくなること、デメリットは先輩も後輩も頑張らないといけないことである。

去年も後輩育成(1day1problem)の話を書いたが、その記事ではこんなことを書いていた。

これは個人的な考えだけど、「機会の提供」をこれからも続けるべきだと思う。 競技をかじってみよう、始めてみようという人が気軽にできる機会を提供して、沼に引きずり込めるようにする。 一度引きずり込んでしまえばこっちのもので、そのうち勝手に問題を解いていくだろう。

この考えは今でも変わっていない。 経験上、詰まったら調べるなり聞くなりできるが、きっかけを与えられることはそんなになかった。 引き込むことを考えるせいか、僕が技術系の話をする時は入門が多いような気がする。 なんだかんだ入門講座も何度かやってきたし。

現状とこれから

  • 3年生以上が勉強会をやりだした
  • 自主的にPythonやらScalaやらC++やらに手を出している1年生がいる

この2つを踏まえると、未来は明るい。 特に勉強会に関しては、後輩をちょくちょく取り込んでいければ継続的なものができそうだ。

とはいえ問題点がないわけでもない。

  • 卒業していく5年生の技術継承はほぼできない
  • 幾つかの企画は5年生が主催しているため、続けるためには後継者が必要

5年生は、プログラミングに関してもデザインに関しても大した継承ができないまま卒業していく。 将来的な成長こそ望めるが、前誰かが言っていたように文書化なりなんなりしていかないと問題は放置されたままだ。 企画に関しては、後輩が引き継ぐか新たな企画をしてくれれば大丈夫だろうか。

さいごに

辿り着く場所なんていらねえ、ただ勉強して進み続けるだけでいい。
お前らが止まらねえ限り、その先に先輩はいるぞ!
だから…止まるんじゃねぇぞ…💃

蛇足

(ピロロロロロ…アイガッタビリィー)

コーヤ・ロードアゲインゥ! 何故君が三日坊主なのか
何故部屋が散らかっているのか(アロワナノー)
何故テスト前の勉強で手を抜くのくわァ! (それ以上言うな!)
ワイワイワーイ その答えはただ一つ… (やめろー!)
アハァー…♡
コーヤ・ロードアゲインゥ!君がICTで最も…意識の低い男だからだぁぁぁぁ!!
(ターニッォン)アーハハハハハハハハハアーハハハハ(ソウトウエキサーイエキサーイ)ハハハハハ!!!

コーヤ「僕が……意識低い……?」 ッヘーイ(煽り)

宝生永夢ゥ!とは (ピロロロロロアイガッタビリィーホウジョウエムゥとは) [単語記事] - ニコニコ大百科の文面を改変

MBAが壊れた話

はじめに

ある日PCの電源がいきなり切れた。 高専に来てから 「何もしてないのに落ちた」 と本気で思ったのは初めてかもしれない。

原因

充電切れではないはずだが、アダプタを繋いでも充電されていないことがわかった。 もしかしてバッテリーセルが外れてるかも、と言われたので、ここに希望を見出す。

サービスプロバイダに持っていったところ、予想外の答えが帰ってきた。

「基盤(マザボ)がやられてますね」

嘘やろ。

「バッテリーが充電されてなかったのは単に満タンだっただけみたいです」

なんてこった。

そして検索へ

修理費をざっくり見積もってもらったら6万ちょい。 仮にもスポンサーから頂いたものだけど、こうなってしまった以上買い替えた方が良さそうな感じがする。 プロバイダの人にも買い替えを勧められたので、どれにするか検討中。

久々にWindows機を引っ張り出してこれを書いてるけど、早くMacに戻りたい。

このままいけば、多分Airの13インチになるはず。