Kaigi on Rails 2021に認証技術の話で登壇した

kaigionrails.org

タイトルの通りです。なんか久しぶりの技術記事だ(?)

内容について

speakerdeck.com

github.com

以下、CfPのDetailに記入した内容より引用:

裏のテーマは「Rails suckというやつは大抵お前がsuckであるように、Devise sucksというやつも大抵お前がsuckだ」です。「インターネットの声のでかい人がDevise sucksっていってたのでそう言わなきゃいけない」みたいな風潮を打破したいと思っています…が煽りすぎな気もするので内容に沿ったタイトルです。

時間が許す限りの実装予定の内容(上から優先度が高い)は

  • パスワード認証を安全な形で作る
  • has_secure_passwordも自分で作る
  • パスワードリセットを作る
  • account confirmationを作る
  • Time-Based OTPで二要素認証を作る (Deviseには入っていませんが…)

を予定しています。自分である程度作った上でDeviseのコードと対照しコードリーディングの手助けをすることを意図しています。 また、Deviseの代替として名前の挙がる sorcery, Rodauth とのアプローチの比較を行い、選定の手助けを行います。

なので、スライド10枚目の

f:id:sylph01:20211025173907p:plain

が根本の問題意識としてあって、それでも認証を自作したい人、認証周りのコードに手を入れなきゃいけなくなった人の手助けになるような「車輪の再発明」の実演をする、というのが今回の主題でした。煽りすぎなのでおとなしいタイトルにした、と言っておきながらスライドには反映されているという…

「Deviseはイケてない」という発想に至るとすればそれは単にユースケースが特殊すぎるからであって、そういうときは別のアプローチのライブラリを使えばいいだけであることが多くて、実際カスタマイズのたくさん入ったフローを自分で書くのであればSorceryのほうが便利、というのは納得が行きます。

実はこのへんの話は神速さん (id:sinsoku) が既に書いていたりします。気づかなかった…

sinsoku.hatenablog.com

あとRodauthすごい。Jeremy Evansはすごい人。RodauthをRailsで使うのどないすればええのってなってたけどrodauth-railsというgemがあるらしい。試してみよう。

github.com

スライドについて、発表動画について

SpeakerDeckで今まで出しているスライドと異なるスタイルであることに気づかれた方もいるかと思いますが、2021年に入ってから発表資料をMarpで作るようになりました。いちおうこれは3件目で、6月にWIDEでしゃべったときと進路講演会でしゃべったときにもこれを使っています。そしてDecksetに依存しなくなったのでついに本格的に脱Appleが達成されました。やせいのプログラマになってからデスクトップOSとしてLinux以外を使わなくてはならなかったのはゲームをするときとAdobeを使うときくらいになりました。なお確定申告はスマートフォンアプリからマイナンバーカードを読み取ることが可能なのでWindowsがなくてもできます。Windowsを使うのとAndroidを使うのとどっちが主義主張に合うかというとけっこう微妙な線ではあるかと思いますが…。

また今回は動画での登壇ですが、これは引っ越したばっかりでインターネット回線があるかがCfP通った時点ではわからなかったからです。10/13入居の10/16インターネット開通*1だったのでインターネット回線は無事存在している状態でしたが、最悪ケースは登壇だけ父実家からやるみたいなことを考えていました。代わりにビデオ登壇にしたわけですが、これはこれで9/26に間に合わすのがかなりしんどかった。

コミットログを見ていただければわかる通りレポジトリのサンプルコードの実装は動画撮ったあと、何なら引っ越してからやっています。もちろん何をどうするかの準備とかはそれまでにはやっていたのですが、実際手を動かしたのが遅いのはやっぱりあまりよくないと思います。Kaigi Driven Developmentというのが存在するのは知っているけれど、それは言ってしまえばCfP出した時点ではできていないのでCfP詐欺という側面も否めなくて、後から作ったものはProgram Committeeが公平に評価することができないため不公平なのではないか、と思っているところがあります。なので私個人としては今回の実装がギリギリになってしまったのはよくないこととして反省点としたいです。

発表動画は5個くらいに分けて動画を撮ってくっつける形にしました。segmented runとかspliced runっていうやつですね*2!動画の撮影はOBSでスライドとカメラを合成する形にし、成功したfootageをKdenliveでくっつける、という形で最終出力になっています。Adobe Premiereも持ってはいるんだけど動画くっつけるだけだったらKdenliveで済むので、動画編集まで含めてLinuxのみで完結しています。

デスクトップLinuxで仕事/生活をしよう、という記事は多分個人事業用Webサイトのほうで書きます。どっちかというとこういう記事もそっちで書いたほうがいいものと思うのだが…(多分ダイジェストだけ書く形になります)

カンファレンスそのものについて

holygrail.hatenablog.com

上記にリンクした id:HolyGrail 氏の記事でも書かれているんですが、物理カンファレンスの「廊下」の様子の再現が今まで参加したオンラインイベントの中でも最もよく再現されていたように思っていて、オンラインカンファレンス、特に議論を主たる目的としないセッションを中心としたオンラインカンファレンスがただのビデオ番組になってしまいがちな問題に対して、かなり有力な解が示されたのではないかと思っています。reBakoというツールがよくできている、はそのとおりなんですが、その上でどうやって物理カンファレンスのスポンサーブース感を出すか、は完全にツールの使い方の部分であり、ここは主催の大倉さんの成果が出ている部分であると思っています。reBakoで難しいなと思ったところでいえば、TwitterのSpacesでマイクをフリーにしているSpacesと同様に、発言権を積極的に得にいっていいものかがわからないためリスナー参加(reBakoでは立ち聞きモード)してしまう、結果として会話の発生の総数が限られてしまう、あるいは既に知っている人同士での会話が中心になってしまう、というのは思いました。まあこういう私もスポンサーブース飛び込むのをあまりしなかったのもあるんですが…*3

次出すの?ということについて

どうやら2回連続でトークしてるのが私だけらしいんですが、今度こそRuby/Railsに関係しそうなネタはネタ切れですし、圧倒的な強さの電波を受信しない限りCfPは出ないんじゃないかと思います。冒頭で話した現場はRuby/Railsを使ってはいるのでなにかネタが降ってくるかもしれませんが…。

昔からの「そんなことはさておいて」読者の方ならピンとくるかもしれませんが*4、学部前期時代に所属していたゼミの先生の書いた『ハード・アカデミズムの時代』という本があり、これはものすごく要約をすると「知を生み出すハード・アカデミズムと既存の知を広めるソフト・アカデミズムを明確に区別せよ、大学の学問の真の役割は前者である」という主張の本です。Kaigi on Railsは「カンファレンスのハードルを下げる」という意味で「いわゆるsoft talk」も受け入れるようにしている、と立場を明確にしていますが、RubyKaigiは「soft talkは要らない、オープンソースにコミットをし、その結果の最高のtech talkを出してくれ」という姿勢の、どちらかというと「オープンソースでの生産」=「生み出す」ことを重視するハード・アカデミズムに近い姿勢をとっていると言えます。Kaigi on Railsのアプローチを否定するものではありませんが、私個人として、大学でコンピュータサイエンスを学んだ者として既存の知を紹介し広めるだけの発表=ソフト・アカデミズムにカテゴライズされるような発表*5をし続けてよいのか、Rubyコミュニティへの明確な「生産」を伴わない発表を続けてよいのか、と思っているところがあります。なので、発表することのみを目的としたCfP投稿はせず、オープンソースコミュニティあるいはビジネスへの価値の生産がまずあって、それを紹介することが十分な価値を持つ場合にのみ、次のCfPを出そうと思います。"free entryでないfull conference talk"の実績を解除させていただけたのは確かにこのイベントではあるんですが、であればそろそろ次の段階に進んだ上で価値を届けないといけないな、とも思っています。まあこういう内容にKaigi on Railsという場が適しているかは置いておくとして…*6

とはいえ完全にカジュアルな勉強成果のトークをやめようということではなくて、勉強会とかでしゃべることは続けます。


総じてとてもよい体験で、COVID-19 pandemicがゆるやかに終息*7に向かっている中そろそろ物理カンファレンスの再開が見え出していますが、オンラインカンファレンスでもかなり物理カンファレンスの良さを再現できるという知見が得られてきていることの成果が現れていて、情勢終息後もオンラインカンファレンスはその良さを活かして生き残っていくのではないか、と思えるようなカンファレンスでした。オンラインであることの最大の良さとして、地方に住んでいても参加できる、特に高額な参加費と旅費を初学者が負担することは非常にしんどいので地方の初学者にとっては非常に有利である性質である、というのがあることを地方に引っ越して実感しています。私含め地方在住Rubyistの一部は日本のどこでRubyKaigiが開かれても行きそうな気がしていますが、初学者がそうかというと絶対そんなことはないでしょうし…。

*1:土日なので工事に割増料金かかったけど…

*2:speedrun/RTA用語で、どちらも部分的なものを貼り合わせたものを指すが、前者は明示的にsegmentに分けて撮っていることを事前に明らかにしているもの(カテゴリ)に使われるのに対し、splicedは「single-segmentであると主張しているが実は貼り合わせであったもの」という「ズルをした」というニュアンスで使われる

*3:Hiringのためにスポンサーブースをやってるところが多い中で、いちおうやせいのプログラマとはいえ、先ちょっと長い間安定して関わってほしいという形の案件を持っているので、あまり直近すぐ転職という選択肢を取れなくて、かといってこっちからなんかvalueのある話ができるかというと…というので尻込みしてしまった

*4:これは2007年のことなのでarchiveのほうの最古参の読者である必要がありますね…

*5:知を生み出すことを至上命題とするハード・アカデミズムにおいては新規性のない研究は研究ではなく、既に似たような内容の記述があるブログ記事が見つかるような内容の発表は当然基準を満たさないので、その点でも今回の発表後に似たような記述の記事を見かけたのは悔しかった

*6:今回私が気に入ったのはtech talk性の高いものももちろんなんですが、印象に残っているのは「どっちかというとtech talkではない」ソフトウェア開発一般に関わる話で、こういうのをやる場がもっと必要だよね、と思っている、ということは付記しておきます

*7:収束は明確な定義を持つ数学用語!科学用語の濫用をやめよう!