Slide 1

Slide 1 text

「〇〇のプラグインを作る」ことの すゝめ Date: 2021/7/18 Author: Event: Hashtag: Kazuya Takei July Tech Festa 2021 #JTF2021_a

Slide 2

Slide 2 text

注意事項 このプレゼンテーションは、Revealj.js によって 作成されており、PDF ファイルはdecktape によっ て出⼒されたものです。 原典はHTML 版となっており、 で公 開されています。 なるべく追従していますが、たまに古い場合があ ります。ご了承ください こちらのURL

Slide 3

Slide 3 text

イントロ 🟦 > 🟦 > 🟦 > 🟦

Slide 4

Slide 4 text

自己紹介 Kazuya Takei NIJIBOX Co., Ltd サーバーサイドエンジニア アーキテクト @attakei as 雑⾷系エンジニア and more Twitter GitHub

Slide 5

Slide 5 text

NIJIBOX について(AD) 株式会社ニジボックスは、UX デザインに特化した、リクル ートグループのWeb 制作会社です。 新規事業の⽴ち上げ⽀援、UX デザイン、UI デザイン、Web 制作、開発、動画制作、イラスト制作、リリース後のグロ ースハックまで、⼀気通貫でサポートしています。

Slide 6

Slide 6 text

NIJIBOX について(AD) 海外のテクノロジー系記事を⽇本語で読むことができ るエンジニア向けのキュレーションメディア 株式会社ニジボックスが運営を引き継ぎ再始動 POSTD

Slide 7

Slide 7 text

トーク内容 ※提出当時のCfP 多くのソフトウェアがコア+ プラグインという構造を取っています。 こ の「プラグイン」は、「コアを⼟台にすることによる軽量な実装」 「機能x 機能というジャンルによるピンポイントな需要の取りやすさ」 などからOSS 活動の実装系はじめの⼀歩として熟れたものとなってい ます。 普段ちょこちょこプラグイン系ライブラリを書いている際にどんなこ とを考えるかを通じて、OSS 活動の⼩さな⼀歩を踏んでみませんか?

Slide 8

Slide 8 text

トーク内容 ※提出当時のCfP 多くのソフトウェアがコア+ プラグインという構造を取っています。 こ の「プラグイン」は、「コアを⼟台にすることによる軽量な実装」 「機能x 機能というジャンルによるピンポイントな需要の取りやすさ」 などから OSS 活動の実装系はじめの⼀歩として熟れたものとなってい ます。 普段ちょこちょこプラグイン系ライブラリを書いている際にどんなこ とを考えるかを通じて、 OSS 活動の⼩さな⼀歩を踏んでみませんか?

Slide 9

Slide 9 text

主に話すこと プラグインとは何か プラグイン開発がOSS 活動の⼀歩⽬に向いている理由 プラグイン開発時に⾃分が考えていること‧⾒ている こと

Slide 10

Slide 10 text

「プラグイン」ってなんだ っけ? ☑ > 🟦 > 🟦 > 🟦

Slide 11

Slide 11 text

プラグインの一般的な位置づけ ※ より引⽤ プラグインとは、差し込む、差込⼝などの意味を持つ英単語。 IT の分野では、ソフトウェアに機能を追加する⼩さなプログラムのこ とを指す場合が多い。 IT ⽤語辞典

Slide 12

Slide 12 text

プラグインの一般的な位置づけ + αの表現として あるソフトウェア‧アプリケーションが存在していて 上記アプリケーションに対して、何かしらの機能追加 を⽬的として提供する ナニカ よく聞く別名: 拡張 , アドオン

Slide 13

Slide 13 text

本体から見たプラグインの表現例 Google Chrome (Chromium 系ブラウザ) における... Chrome 拡張 Ansible における... Plugins Modules Role(?) Slack に対する... Slack app Slackbot Outgoing Webhook

Slide 14

Slide 14 text

本体とプラグインの関係性 本体は、それ⾃体で本来の⽬的機能を⼗分提供可能なもの Google Chrome Slack 関係性: 本体 >>>>> プラグイン

Slide 15

Slide 15 text

本体とプラグインの関係性 本体は必要最低限に近い機能のみを提供し、プラグインの 受け⼝がわかりやすく指定されているもの Sphinx Fluentd Mackerel 関係性: 本体 >>> プラグイン 本体+ 同梱プラグイン >> プラグイン

Slide 16

Slide 16 text

本体とプラグインの関係性 本体の実質的な役割が、「プラグインが⾏う処理をハンド リングすること」になっているもの Errbot Hubot 関係性: 本体 <-> プラグイン ( 共依存が強い)

Slide 17

Slide 17 text

本体とプラグインの関係性 本体の機能が⼗分あるほどユーザー向け? 本体の機能が薄いほどエンジニア向け?

Slide 18

Slide 18 text

「プラグイン」がOSS活動 に向いている? ☑ > ☑ > 🟦 > 🟦 > 🟦

Slide 19

Slide 19 text

プラグインの特徴振り返り アプリケーションに機能を追加するナニカ アプリケーションが存在することが前提 機能⾃体の⼤⼩は問わないが、基本的に⼩さな機能で も良い

Slide 20

Slide 20 text

プラグインの特徴から見た、OSS活動 入門との親和性 コンパクトな実装でOSS として成⽴する ⾃分の『不』を⼿軽に解消するトレーニングになりう る 質のいいコード‧ドキュメントのリーディング機会が 増える

Slide 21

Slide 21 text

コンパクトな実装でOSSとして成立す る よくあるプラグインの「振る舞い」

Slide 22

Slide 22 text

コンパクトな実装でOSSとして成立す る よくあるプラグインの「振る舞い」

Slide 23

Slide 23 text

コンパクトな実装でOSSとして成立す る プラグインが持つ最低限の責務 本体とのI/O ルールに基づいた、処理の定義を⾏う ( いつ呼ばれるべきかを指定する) ⾮常にシンプル ( 実際にはもうちょっとあることが多い)

Slide 24

Slide 24 text

コンパクトな実装でOSSとして成立す る sphinxcontrib-gtagjs Sphinx 本体が「HTML を⽣成するタイミング」で呼び 出されて 「Google のグローバルサイトタグを⽣成して」引き渡 す ソースは45 ⾏(本質的な箇所は⾮常に少ない)

Slide 25

Slide 25 text

コンパクトな実装でOSSとして成立す る ... ちなみに コンパクトな実装のためには、適度な分割をする 分割すると、数をこなせるようになる 数をこなすと、OSS 活動のいいトレーニングになる

Slide 26

Slide 26 text

質のいいコード・ドキュメントのリー ディング機会が増える プラグインを作るには、本来の処理の情報 + プラグインを 呼ぶ本体の情報 が必要。

Slide 27

Slide 27 text

質のいいコード・ドキュメントのリー ディング機会が増える プラグインを作るには、本来の処理の情報 + プラグインを 呼ぶ本体の情報 が必要。 本体の情報 = ドキュメント+ ソースコードを読む ドキュメントの充実度合いが⾼い(特にエンジニア向 けプロダクト) こういうプロダクトはソースコードも読みやすい ↑リーディング機会が増加する

Slide 28

Slide 28 text

質のいいコード・ドキュメントのリー ディング機会が増える

Slide 29

Slide 29 text

質のいいコード・ドキュメントのリー ディング機会が増える

Slide 30

Slide 30 text

「プラグイン開発」のアプ ローチ ☑ > ☑ > ☑ > 🟦

Slide 31

Slide 31 text

どこから実装の手をつけるか問題 どっちから⼿を付ける? I/O のほうが本体連動させやすい メイン処理のほうが独⽴して動作確認しやすい

Slide 32

Slide 32 text

どこから実装の手をつけるか問題 どっちから⼿を付ける? I/O のほうが本体連動させやすい メイン処理のほうが独⽴して動作確認しやすい ←個⼈ 的にはこっち

Slide 33

Slide 33 text

どこから実装の手をつけるか問題 どこから⼿を付ける? I/O のほうが本体連動させやすい メイン処理のほうが独⽴して動作確認しやすい ←個⼈ 的にはこっち ※いくつか作ると結果的にI/O が先に出来るようになる

Slide 34

Slide 34 text

何を参考にするか問題 本体ドキュメント(+ ソース) 本体同梱プラグインのソース 「プラグインを作ってみた」系の記事 サードパーティ製プラグインのソース

Slide 35

Slide 35 text

本体ドキュメントを参考にする プラグインの重要度が⾼いと、専⽤のセクションもあ る プラグイン開発に関するドキュメントの充実度は、千 差万別 「困った時には原典に当たる」精神を忘れずに

Slide 36

Slide 36 text

本体同梱プラグインを参考にする 主要になりうる機能プラグインは、同梱物を直接参照 できる場所にある リファレンス実装ではないナニカとなっている 同梱 = 本体開発者のお⼿製という傾向が強く、 本体設計を暗黙知として実装している可能性があるの で要注意

Slide 37

Slide 37 text

「プラグインを作ってみた」系の記事 を参考にする いわゆる、Zenn ‧Qiita ‧ブログにある記事 本体開発元と関係が深い組織が公開しているケースも あり、良いチュートリアルになる UGC 系は⼀般ユーザー視点で、躓きドコロを紹介して くれたりもする

Slide 38

Slide 38 text

サードパーティ製プラグインを参考に する 未来の⾃分と同じく「困り⼿」によって作られている ドキュメントを元に素直な実装をしていることがしば しば GitHub stars の多いプラグインは、それ⾃体がリファ レンス実装とも⾔える

Slide 39

Slide 39 text

ちょっとした小話 ☑ > ☑ > ☑ > 🟦

Slide 40

Slide 40 text

プラグイン開発にはアンテナが必要

Slide 41

Slide 41 text

プラグイン開発にはアンテナが必要 2 ⽅⾯の状況に気を使う必要がある 本体の更新状況 メイン処理のライブラリの更新状況

Slide 42

Slide 42 text

プラグイン開発にはアンテナが必要 sphinx-revealjs の安定的な更新管理のためには Sphinx の更新への追従 Reaveal.js の定期的な最新版取り込み

Slide 43

Slide 43 text

まとめ ☑ > ☑ > ☑ > ☑

Slide 44

Slide 44 text

トーク振り返り プラグイン開発は、 プラグインを前提にしている場合、プラグイン開発を しやすい環境を提供してくれている コンパクトな処理を提供できるため、考える範囲が少 なくて済む メジャーなプロダクトだと、サードパーティのプラグ インという教材が豊富 = OSS 活動のスタートを切るのにちょうどよい

Slide 45

Slide 45 text

トーク振り返り さらに、公開することで…… ⾃分以外の同じ困りごとがある⼈が⾒つかるかも 同じ困りごとでも違う困りごとが⾒つかるかも より良い解決⽅法を知る⼈が降臨してくれるかも と、⾃分以外のリアクションが可視化されていく = 楽しい

Slide 46

Slide 46 text

トーク振り返り 最近あったリアクション ※登壇準備をしてて放置して いたので、これから読みます Rodolfo Campos @camposer Hey @attakei I was playing around with your implementation of the Errbot Slack Bolt Backend. Thanks for implementing it! Here's a simple test that I put together: github.com/camposer/errbo… Check out the manifest, other scopes were required camposer/errbot-slack-bolt-test Errbot Slack Bolt Test. Contribute to camposer/errbot-slack-bolt-test development by creating an account on GitHub. github.com 午後8:25 · 2021年7⽉14⽇ ツイートへのリンクをコピー

Slide 47

Slide 47 text

このセッションを機会 に、自身の中の小さな需 要をOSS活動の一歩目の 題材にしてみませんか?