nikkie-ftnextの日記

イベントレポートや読書メモを発信

ブラウザだけでラクラク!GitHubでtypo修正プルリクエスト作成

はじめに

世界は、ひとつずつ変えることができる。1 nikkieです。

先日、VSCode拡張のハンズオンテキストに取り組みました2
その中でテキストに見つけたtypoを修正するプルリクエスを出しています!

こういったtypo修正プルリクエスト、実はブラウザだけで完結させられちゃうんです!
今回はGitHubにブラウザだけでプルリクエストを作る秘密を明かしちゃいます。

目次

nikkieとtypo修正

ドキュメントを読んでいるとtypo(誤植)に気づくことってありますよね?
そんなとき私はなるべくプルリクエストまで作るようにしています。
Webに公開されているページは今後も見る人がいるでしょうし、その人も「あれ?」と思うでしょう。
できないときもあるのですが、「気づいた以上はなるべく直したい!」と時間を捻出してプルリクエストを作ります。

最初はgitリポジトリをローカル開発環境にcloneしてやっていました。

  1. 対象リポジトリGitHubでfork
  2. forkしたリポジトリをローカルにclone
  3. ローカルでブランチを切る
  4. typo修正コミット
  5. GitHubにpushして、プルリクエスト作成

この手順でtypoを修正する目的は果たせるのですが、何回かやってみて「ローカル開発環境を経由するのが手間だな」と感じ始めました。
1日の時間は24時間と有限ですから、なるべく短時間でtypo修正プルリクエストを作りたいのです。
そこで、ローカルにcloneせずにブラウザだけで完結させる方法を探し始めたのです。

ブラウザ操作でラクラクtypo修正プルリクエスト!

以下の手順でブラウザだけでできます:

  1. 対象リポジトリGitHubでfork
  2. forkしたリポジトリで対象ファイルを編集しtypo修正。ブランチを作ってコミット
  3. fork元のリポジトリを開いて、プルリクエスト作成

ローカルにcloneせずにこれだけでできます!!

2は言葉で伝えるのが難しそうなのでスクリーンショットもお見せします。

鉛筆マークからブラウザ上でファイルを編集できます。
このエディタは検索もできます。

typoを修正したら、ブラウザを一番下までスクロール!
コミットが作れます。

操作は

  • Create a new branch for this commit and start a pull request(新しいブランチを作ってプルリクエストを始める)を選択
  • ブランチ名を入力
  • 「Propose changes」(変更を提案)をクリック

です。
これでforkしたリポジトリのブランチにtypo修正コミットができました!
このあとは、自分が持っているforkしたリポジトリに対してプルリクエストが作れる画面に遷移するのですが、これはやりたいことではないのでそっ閉じします。

今回やりたいことはfork元のリポジトリへのプルリクエスト作成です。
手順3にあるように、fork元のリポジトリ(のトップ)を開きましょう!
そうすると「あなたが持っているforkしたリポジトリのこれこれブランチからプルリクエストが作れるよ」と通知が出ます。
この通知に従ってプルリクエストを作ります。

以上、ローカルを介す方法よりも簡単になったと感じています!

補足情報

typo修正時のtips

(1)OSSへのプルリクエスト作成手順としては聞くことが多いのですが、すでに同じプルリクエストが出ているかさっと検索しましょう。
typoの内容で検索して判断しています。

(2)意見が分かれるかもしれませんが、私の場合はtypoを見つけたIssueを作ります。

リポジトリ内を検索し、「こういったtypoがこことここにあるよ」とtypoと対応箇所を列挙します。
いきなりプルリクエストを作るよりはまずIssueまで作ります。

こういったIssueはGood firstなので他の方にやっていただいても、作者も私もとてもありがたいと考えています(「なんとしても私がこのtypoを直すんだ!」という気持ちはnikkieにはありません)。
自分のタスクを調整して時間を作り、上で紹介した手順でブラウザを操作していくわけですが、直すところが列挙されているので高速な操作に集中できます。

typo修正よりもう少し込み入った変更はできないの?

github.devでできるかもしれません。
変更箇所が多かったときはURLをgithub.devに書き換えて遷移し、VSCode風UIで複数ファイルに渡った置換をし、その後コミットを作りました。
GitHubの方針としてブラウザだけで開発が完結する世界を目指している3ように見えるので、もっと可能性はあると思います(ブラウザだけでこんなプルリクエスト送ったよ!という事例ができたら教えてください!)

作業を始めたら別のtypoにも気づいたとき

これも好みですが、プルリクエスト1つ1つは小さい方が望ましいと考えているので、私の考えとしては一度に対処せずに分けて対処します。

また、過去に徹底的にやったほうがいいなと判断したときは、ローカルにcloneしてVSCodeCode Spell Checker拡張で一網打尽にしました。
書いていて浮かんだのですが、github.devでCode Spell Checker拡張をインストールしてもよいかもしれません(今度試してみよう)。

コンテンツを生み出す方と読者の役割分担

技術同人誌を書くにあたっての心構えとして印象に残っている言葉があります。
コンテンツを生み出そうとしているとき、typoを恐れずとにかく1文字でも書き進めるという教えです4
私も経験があるのですが、締切は待ってくれませんし、書き切らなければそのコンテンツは世に出ません。
なので、typoはない方がいいですが、それはnice to haveで、書き手はmustな「書き切る」に全集中になるのだと思います。

人間はすごいので多少のtypoがあっても読み切れます。
OSSで公開されているチュートリアルのようなコンテンツの場合、読み手は書き切った書き手に感謝し、気づいたtypoがあれば直すプルリクエストを送るというのが、いまの私が考える役割分担の形です。
ゼロからコンテンツを生み出してくださり、とにかくありがとうございます!
そして気づいた点があったときは、一緒によりよくしていく手伝いをちょっとだけでもさせてください!

終わりに

typoに気づいたらプルリクエストを送るを重ねる中で生み出した「全部ブラウザで完結させる方法」を紹介しました。
本記事を読んで「私も見つけたtypoの修正プルリクエスト出しました!」という方がいらっしゃれば、それ以上に嬉しいことはありません。

小さな点でも立派な改善だと思うのです。
公開いただいているコンテンツに小さなプルリクエストという形でも感謝を伝えてみてはいかがでしょうか。

P.S. ボーイスカウトルール

Uncle Bobが『プログラマが知るべき97のこと』に寄稿しています。

たとえ自分が来た時にキャンプ場が汚くなっていたとしても、そしてたとえ汚したのが自分でなかったとしても、綺麗にしてからその場を去る、というルールです。

今回取り上げたケース、当然自分がtypoしたわけではないですが、気づいた以上はきれいにするというのが、ボーイスカウトルールに通ずるなと思い出しました。

なお、コードの品質をよくしていくためのボーイスカウトルールの適用は、Uncle Bobの新刊『Clean Craftsmanship』を読むとTDDと切り離せないように今は感じ始めています。
テストハーネスがあれば、コードの品質をよくしようという際に自信を持って進められますもんね。


  1. この記事を書いていて思い出したのが富士フイルムさんでした。世界は、ひとつずつ変えることができる。|富士フイルムの技術

  2. どうかしてるぜ!

  3. GitHub Actionsやdevcontainersは、私にはそのように見えています

  4. 記憶が曖昧ですが、ソースはワンストップシリーズの技術同人誌でしょうか?

スペースレポート | #pyconjp 2022 Day1 13:00〜のトークが、ヒトツダケナンテエラベナイ #にっきーは語りたい

はじめに

生まれたトキメキ!」(10/14まであと27日)、nikkieです。

先日PyCon APAC 2022参加にあたり、Twitterスペースで面白そうなトーク語りをしました1
次なるカンファレンスは10/14(金)・10/15(土)のPyCon JP 2022ですね!
そこで、PyCon JP 2022についても、スペースで「このトークはここが面白そうで楽しみ」と語っていきたいと思います。

今回はDay1 13:00〜の5つのトークについて語ったスペースをブログ記事にまとめます。
👇こちらから聴けますよ〜👇

目次

有明開催!PyCon JP 2022

チケット発売中です!(オンライン枠は現在売り切れ中)

タイムテーブルはこちら2

https://pretalx.com/pyconjp2022/schedule/

Day 1 13:00〜のトークは日本語🇯🇵3本、英語🌐2本です。

おことわり

  • nikkieはPyCon JP 2021座長の後、2022のスタッフ活動はしていません3
    • なので、スペースやブログでのPyCon JP 2022に関するアウトプットは非公式です
    • 盛り上げの一助になったらいいな〜とやっています(タイムテーブルを見ると一人で盛り上がっちゃうというのもあります)
  • タイムテーブルでトークの詳細を見て「妄想」した内容です
    • nikkieのアウトプットの通りのトークになる保証は全くありませんので、割り引いて聞いて/読んでください
  • Pythonが絡むといろいろなことに興味を持てちゃうのですが、その分野を分かっている方からは「そのトークはここも見どころなんですよ」というツッコミもあると思います
    • そういったツッコミをぜひ聞きたいので、Twitter @ftnextまでタレコミお待ちしています
    • 他の方から「私このトークのここが楽しみなんです」を聞いて自分独りでは気づいていなかった着眼点に気づけるのはとてもよいと思っています

Sphinxを通して考える、「拡張」の仕方 (🇯🇵 pyconjp_1)

sphinx-revealjsで大変お世話になっている4attakeiさんによるトーク

Sphinxはスルメな(使い込むほどに味がある)ライブラリだと思っています。
過去に技術同人誌をSphinxで作った経験があります5が、私も本にする上で"出来ることなら〇〇したい"がありました。
検索した結果「Sphinx拡張」でできるらしいとわかり、公式ドキュメントやメンテナのtk0miyaさんのアウトプットから情報をたどり、なんとか拡張を実現したという経験があります。
情報が全然なくて、breakpointでデバッグしてなんとかやりたいことができました🙌

一度拡張が作れるようになるとSphinxの自由度がめちゃくちゃ上がります!6
だいたいなんでも作れると思えています7

私は情報が少なくて苦労したのですが、PyCon JPの場でsphinx-revealjsなど拡張経験豊富なattakeiさんの発表が聞ける・記録に残るのはきっと価値があると勝手ながら期待しています(私と同じ苦労をしてほしくないんです!)

詳解 print("Hello, world") (🇯🇵 pyconjp_4)

Python実践入門』で大変お世話になっているhoboroさんによるトーク
この本はPythonを使いこなす入り口までの案内として「私の中ではぶっちぎりの一位」です。

hoboroさんが取り上げるのは print("Hello, world")
皆はじめはこのコードからだと思いますが、このトークprint("Hello, world")裏側を深堀りするようです。
パーサ、AST(astモジュール)、バイトコードdisモジュール)といったPythonの裏側、さらにCやOSといった低レイヤーまで!
誰しも最初は通る道、hoboroさんのガイドで改めて通ると入門時には見えていなかったことが見えて全く別世界が見えるんじゃないかとときめいちゃってます(はじまりの街にある隠しダンジョン感!)

業務改善の面白さ ~毎日更新されるビジュアルコンテンツの差分をわかりやすくするためのプロトタイプを作るまで~ (🇯🇵 pyconjp_5)

日本経済新聞社からまりーなさんの発表。

毎日更新されるビジュアルコンテンツとは「チャートで見る日本の接種状況 コロナワクチン」

reg-suit8という既存のライブラリを検討した末に、自作することにされたそうです。

OpenCVで画像の差分と聞いて、サイゼリヤの間違い探しを(大人げなく)解いた事例を思い出しました。

作ったプロトタイプが記者の方から感謝されているというのは、エンジニアリングで課題解決の好例だと思います。
また非常にエモいメッセージも投げかけていただけそうです(トーク詳細の「伝えたいこと」をぜひどうぞ!)

Working with Rust and Python using PyO3 (🌐 pyconjp_3)

ここからは英語トークです。

PythonとRustを一緒に使う話9
「using Rust as a performance enhancing language」(訳すと、性能強化言語)ということで、Pythonだと処理時間が気になる部分をRustを使って高速に処理するという知見が共有されるのかなと想像しています。
PyO3やmaturinというライブラリはPythonとRustを一緒に使うのを可能にするようですね。

このトーク自体はRustに入門済みというのが想定されていそうです(トークの詳細に「HashMaps」「Structs」「panics」という語が詳細な説明なく出てくるため)。
ですが、「PythonもRustも使えるとこんなに便利なのか!このトークを機にRustはじめちゃおっかな」というスタンスで聞きに行くのもありかもしれませんね!

Introducing new game development stack using XState, PyScript and Atri (🌐 pyconjp_2)

Pythonを使ったゲーム開発の話。
タイトルにあるAtri10の開発元の共同創業者兼CTOの方が話されるそうです!

ゲーム開発はNumPy arrayを使うんですね!
しかもそれをWeb GLに変換できるという!
私は経験がまったくない世界なので、ゲーム開発に触れられるだけでもワクワクします。

ゲームは状態(state)の管理が肝というのは(『冴えない彼女の育てかた』『ぼくたちのリメイク』を思い出して)なんとなく納得できるところです。
紹介される予定の「statecharts」「XState」で検索すると、状態遷移をJSONで表す例11も見つかりました。

Pythonはサーバサイドなのかな?」と思いきや、PyScriptでブラウザ(クライアントサイド)でも動かせるんでしょうか!?
今年5月のUS PyConで発表されたPyScriptを使うことで「そんなことまでできるのか!」と、刺激に溢れたトークになりそうです。

トークを聞く以外の選択肢もあります!

5本のトーク、どれも面白そうでヒトツダケナンテエラベナイヨーなんですが、トークを聞かずに交流に振るという参加スタイルもあります。

気になるものは後日YouTubeで配信される動画で見ることにして、当日はブースを回ったり、周囲の人の話を聞いたりしています。

connpassの有明参加枠は現時点で615!
これだけのPython使いが一堂に会するのはPyCon JP 2019以来12
オンサイトではお久しぶりの方もいるでしょうし(オンラインでつながっていてオンサイトではじめましてもあるかも!!)、知り合い増やすという意味でも交流に振るは全然あると思います。
初参加という方で、知り合いいないという方はとりあえずnikkieと「ういっすー✌️」や「ヒトツダケナンテエラベナイヨー」しましょう!(こういうこと話せる人知りませんかとか聞いてもらって大丈夫です)

終わりに

Day 1 13:00〜のトーク5本からどのトークを聞くか、ヒトツダケナンテエラベマセンでした!!

  • Sphinx拡張(情報少なく苦労した話題がPyCon JPで!!)
  • Python実践入門』著者とprint("Hello, world")の裏側へ
  • サイトのスクリーンショットを撮り、差分を検出するツールを自作した事例
  • 性能強化の観点でRustをPythonと一緒に使う
  • ゲーム開発(NumPy arrayやPyScriptなどなど)

PyCon JP 2022のスタッフの方々、罪深すぎますよ。
こんなに素晴らしいトークを集めてくれちゃってどうしてくれるんですか!
もうありがとうしかないですよ! 徹夜で命削ってアーカイブで全部見ますよ!!

トークのスロットは全部で9つあり、まだまだ語り足りません。
そして次のPyCon JP 2022を語りたい(そしてヒトツダケナンテエラベナイヨー)が始まるのです。


  1. スペースレポート | #pyconapac2022 の面白そうなトーク語り part 1 #PyConAPAC #にっきーは語りたい - nikkie-ftnextの日記

  2. https://2022.pycon.jp/timetable から案内される「別サイトのタイムテーブル」です。お気に入り⭐️もできるみたいで助かりますね!

  3. 当日スタッフで1日くらいお手伝いできるかもと思っています

  4. ヘビーユーザーです!sphinx-revealjsで作ったスライド(HTML)をGitHub Pagesで公開しています

  5. イベントレポート | #技書博 2で初めて一人で執筆して頒布し、いただいたフィードバックから技術同人誌の楽しさを知りました - nikkie-ftnextの日記

  6. Sphinx拡張の道は「ハンター試験」なんですかね?

  7. 実はランディングページもSphinxで作りました!その話はまた別の機会に

  8. suitなので、読みは「レグ スート」でしょうか。スペースでスイートと読んでいたのは誤りですね

  9. 過去のPyCon JPでもありました。https://pycon.jp/2020/timetable/?id=203945 (日本語トーク

  10. https://github.com/Atri-Labs

  11. How to use statecharts - Statecharts

  12. 各所で「3年ぶりの現地開催」と書かれているようですが、PyCon JP 2021座長としてお気持ち⚔️飛ばさせてください 「2021年も現地開催でしたよ?」(オンライン開催と現地開催のハイブリッド開催) 600人という大人数が一堂に会するのが3年ぶりと読み替えています

論文「Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning」(2018 Sebastian Raschka)を読み始めました

はじめに

青春は、やさしいだけじゃない。痛いだけでもない。1 nikkieです🍨

機械学習モデルの評価についての論文を読み始めました。
まだ読んでいる途中ではありますが、アウトプットしていきます。

目次

論文「Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning」

Sebastian Raschka氏が2018年に発表した論文です。
タイトルを訳してみると「機械学習におけるモデル評価、モデル選択、アルゴリズム選択」。
PDFは全49ページで、機械学習モデルの評価について詳細に書かれています。

なぜ読んでいるの?

きっかけのツイート

この論文の存在を知ったきっかけは以下のツイート2

機械学習モデルの評価について、「この論文は私の断然お気に入りの単体で書かれた資料」と紹介されています(this paper from rasbt is by far my favorite single written resource

Python機械学習プログラミング』の著者!

この論文の著者のSebastian Raschka氏はrasbtというアカウント名で知られます。
氏の実績を1つ紹介すると、日本でも3版まで翻訳されている『Python機械学習プログラミング』の著者です!

この本には過去に情報量で圧倒された経験があり、「rasbtさんの書いたモデル評価についての50ページに渡る論文、読んでみたい!」と即決でした。

再度、論文「Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning」

結論を示す図

Figure 23(画像は後述するrasbt氏ブログのPart IV記事より引用しています)

ブログバージョンもあります

rasbt氏のブログ4編をもとに、この論文が書かれたそうです。
ブログと論文は一言一句同じではありません。
今回は論文だけを読んでいます。

大まかに伝えると

論じるタスクは3つ

機械学習モデルの性能の評価について3つのサブタスクを導入します(1.1)。

  1. We want to estimate the generalization performance, the predictive performance of our model on future (unseen) data.
    • 大雑把な訳「汎化性能(未知のデータについてのモデルの予測の性能)を見積もりたい」
    • タイトルのModel Evaluationのことと理解しました
  2. We want to increase the predictive performance by tweaking the learning algorithm and selecting the best performing model from a given hypothesis space.
    • 大雑把な訳「学習アルゴリズム(のハイパーパラメタ)を調整し、最良の性能のモデルを選択することで、予測性能を高めたい」
    • タイトルのModel Selectionのことと理解しました
  3. we want to compare different algorithms, selecting the best-performing one as well as the best performing model from the algorithm’s hypothesis space.
    • 大雑把な訳「最良の性能のモデルを選択するために、異なるアルゴリズムを比較したい」
    • タイトルのAlgorithm Selectionのことと理解しました

これら3つのサブタスクは異なるアプローチを要求すると続きます(they all require different approaches)(1.1)。

論文の構成は4セクション

上記3つのサブタスクについて全4セクションで論じられます。

  1. Introduction: Essential Model Evaluation Terms and Techniques
    • モデル評価の方法としてホールドアウト法を紹介
    • 感想:手元のテストセットという限られたデータで汎化性能を見積もるので、統計学の考え方が使われました。機械学習でこれまでで一番統計を使ったと思います(大学以来🤯)
  2. Bootstrapping and Uncertainties
    • ホールドアウト法の欠点を克服する他の評価方法を紹介
    • 感想:ブートストラップの種々の方法は初めて知りました
  3. Cross-validation and Hyperparameter Optimization
    • 交差検証について、モデル評価・モデル選択2つの観点から論じられます
    • 感想:交差検証って機械学習の入門書ではわずかなページ数だと思いますが、これは奥が深い!
  4. Algorithm Comparison(※これから読みます)

終わりに

rasbt氏の機械学習モデルの評価についての論文、これは理論に殴られる体験でした。
いろいろ分からされました、こてんぱんにされています。
書籍でキャッチアップして来た身ですが、モデル評価のやり方で「なんでだろう?」と思っていたところがこの論文でだいぶつかめてきました。

  • ホールドアウト法でtrain/testに分けた後、train+testでモデルを訓練するのはどういう意味なのか
  • 交差検証、データの前処理(例:自然言語処理におけるベクトル化)は各Foldで都度行う? それともまとめて1回だけ行う?
  • 交差検証ってこの手順でやるのか!(trainのFoldをtrainとvalidationに分けて進めるのですが、最後にtrain+validation+testで訓練します3

今回は全体感についてのアウトプットにとどまりますが、セクションレベルで今後アウトプットできたらと思っています。

評価にあんまり自信持てていなかったのですが、今回のインプットはよかったです。
ボコボコにされた分、めちゃ学びがありました!4


  1. えるたそ〜

  2. PyCon APAC 2022でGraph Neural Networkの発表をされた先生のTwitterを見に行って、このツイートと出会いました

  3. 最後の全データの訓練はオプショナルとも説明されます

  4. これも「避けずに少し勉強する」効果ですね! 8/18(木)のみんなのPython勉強会 #stapy 非同期処理特集に向けて asyncio を予習するのです - nikkie-ftnextの日記

VSCode拡張開発 素振りの記:ハンズオンテキストを元に「歩夢」を「歩夢🎀」に置き換える拡張を自作し、コマンドとコードレンズを完全に理解

はじめに

私の夢を、一緒に見てくれる?」、nikkie です。

エディタ Visual Studio Code、通称「VSCode」、私は普段使いしています。
VSCode には豊富な拡張があり、特に Python 拡張には大変助けてもらっていますが、この拡張って自作できるんですよね。
VSCode の拡張どうやって作るんだろう?」と気になり、ハンズオンテキストに沿ったり脱線したりしながら素振りしてみました。
その模様を綴ります!

目次

できたもの:この拡張、どうかしてるぜ!👍

VSCodeMarkdown ファイルを編集しているとき、「歩夢」という文字列があると、マウスクリックでそこに 🎀 を追加できます1

歩夢 -> 歩夢 🎀 -> 歩夢 🎀🎀 -> ...

マウスクリックでラクラク emoji が追加できる!
無限に 🎀 が追加できます!
やばい、たーのしーー ⤴️
この発想、どうかしてるぜ!

Hello VS Code Extension ハンズオンテキスト

この無限 🎀 追加拡張の作り方がどこかのテキストに載っているわけではなく2、ハンズオンテキストを進める中で「実現できるな」と気づき爆誕させました!

このハンズオンはVSCode Conference Japan 2021で開催されました。
LSP(Language Server Protocol)を使った拡張については YouTube に動画も残っています3
ただいきなり LSP を使うのはハードルが高いと感じたため、GitHub リポジトリの方の基礎編「拡張機能の基礎を学びたい人向け」に取り組むことにしました。
TypeScript も触ったことすらないというレベルなので、一歩目は小さくしたかったのです。

拡張機能の基礎を学びたい人向け

https://github.com/vscodejp/handson-hello-vscode-extension/tree/bd882275b6802f9c3bcb5717ae0f32cbe2d89a60/docs/beginner

基礎編のコンテンツは 4 つ。

  1. 拡張開発に必要なファイル類を配置する
  2. Hello World 拡張を起動する
  3. スニペット拡張機能を作る
  4. ドキュメントを編集する拡張機能を作る

3 だけは手を動かさずに進め、4 を作った後に「ドキュメントの編集の内容を応用すればいけそう」と、上で紹介したどうかしている拡張を自作しました 🎀

環境構築

ハンズオンテキストは充実しており、環境構築も案内されます!
https://github.com/vscodejp/handson-hello-vscode-extension/blob/bd882275b6802f9c3bcb5717ae0f32cbe2d89a60/docs/00_prepare.md

以下を用意しました:

  • VSCode
    • ESLint 拡張
  • Node.js
    • Yeoman

Yeoman は VSCode 拡張開発の雛形を生成する(つまり、ディレクトリやファイル一式を配置する)ツールでした。
初めて知ったのですが、なんと Python を使った開発の雛形も作ってくれるようです。興味深い!

ハンズオンテキスト(基礎編)に沿った素振り

ファイル類の配置

yo codeで一発なんだ YO!
Yeoman すごいんだ YO!!

Hello World 拡張を起動

Yeoman で作成すると、デフォルトで Hello World 拡張が実装されています(src/extension.ts)。
起動を試み、開発環境が整っているか確認しました。

  1. F5 キーで拡張機能をビルド
    • 新しい VSCode のウィンドウが開く
  2. 新しい VSCode のウィンドウで F1 キー(コマンドパレット呼び出し)
  3. コマンドパレットから「Hello World」を実行
    • 新しい VSCode のウィンドウ右下に「Hello World」という通知が出ます 🙌

vscode.window.showInformationMessageに渡す文字列を変えて再ビルドすることで、新しい VSCode のウィンドウに反映されます。
表示する文字の変え方も分かりました!

vscode.commands.registerCommandメソッドで'hello-vscode.helloWorld'という識別子でコマンドを登録しています(処理自体はコールバック関数として渡しています)。
package.jsonにて、コマンドの識別子が「Hello World」というコマンドパレットでの表示と結び付けられていました!

  "contributes": {
    "commands": [
      {
        "command": "hello-vscode.helloWorld",
        "title": "Hello World"
      }
    ]
  },

基礎編メインの実装:ドキュメントを編集する拡張機能を作る

日付を挿入するVSCode拡張

https://github.com/vscodejp/handson-hello-vscode-extension/blob/bd882275b6802f9c3bcb5717ae0f32cbe2d89a60/docs/beginner/04_edit.md

基礎編で作る拡張機能は、VSCodemarkdownを編集中に、最初の行が見出し(#で始まる)であれば、日付を挿入するためのコードレンズのボタン「add date」を表示するというものです4

# s

という行から始まっているとすると、「add date」で

# 2022/09/11 s

に変わります(日付が挿入されました)。

日付を挿入するVSCode拡張を作る

src/extension.tsで実装し、新しい VSCode のウィンドウで動作確認します。
実装手順は以下

  1. package.jsonactivationEventsを設定
  2. 拡張機能起動時に自作のCodeLensProviderを起動する実装
    • vscode.CodeLensProviderを継承して定義
    • 拡張機能起動でactivate関数が呼び出される
    • activate関数で自作のCodeLensProviderを登録(vscode.languages.registerCodeLensProvider
  3. ドキュメントを解析してコードレンズを表示
    • 正規表現を使って「最初の行が見出し」を探す
    • 見つかった行についてコードレンズを作成(☆)
    • 「add date」が表示されるだけでクリックしても何も起こりません
  4. コードレンズをクリックしてドキュメントが編集できるようにする
    • "markdown-date.addDate"コマンドを登録(vscode.commands.registerCommand
    • コードレンズで"markdown-date.addDate"コマンドが実行されるようにする
    • コマンドの中身(コールバック関数)はコードレンズの range のテキストを読み取り、日付を加えたテキストに置き換えるという実装(editBuilder.replace

これでテキストと同じように動く拡張ができました!

上で示した例で最初の行が「# s」とすると、コードレンズの range に該当するのは「#」(空白含む)です。
ここに日付(と空白)を加えて# 20220911)「# s」を置き換えます。
すると結果は「# 20220911 s」と日付が追加されるというわけです!
一度コードレンズから「add date」してもmarkdownの見出しであることは変わらないので、何度でも日付を追加できちゃいます。

はじめてTypeScript(ほほえまエピソード)

TypeScript の開発でややとまどった点をご紹介。
3 の(☆)のところ、実装は以下のようになります。

const command = {
  title: "add oshi emoji",
  tooltip: "add oshi emoji",
};
codeLenses.push(new vscode.CodeLens(range, command));

ここでnew vscode.CodeLens(range, command)の command に赤線が!

Argument of type '{ title: string; tooltip: string; }' is not assignable to parameter of type 'Command'.

「赤線あるからビルドできない?」と不安に襲われましたが、新しい VSCode のウィンドウでの実行はできました。
赤線は 4 でオブジェクト5commandcommandというキーとその値(イベントの識別子)を追加することで解消します。
どうやら、CodeLens のイニシャライザの第 2 引数はCommandというインタフェースを実装しているかをチェックし、3 の時点では実装していないと判断されたため赤くなったようです。
4 で実装を追加すると、オブジェクトcommandCommandインタフェースで必須のtitlecommandも両方持つので、型チェックを通ったと理解しました。
期待されるプロパティを持っているかをインターフェースでチェックするというのは興味深いですね。

日付の代わりに、「歩夢」を見つけたら「歩夢 🎀」に置き換える!

日付の挿入は、正規表現を使って該当するパターンを検索し、置き換えを実施していました。
このことから、日付の挿入に限らず、「指定したパターンに別の文字列を追加できるということか!」とときめいちゃいました!
こうして、どうかしている VSCode 拡張が爆誕したのです。

日付の追加と同じロジックで「歩夢」を「歩夢🎀」に置き換えます。

例えば

「歩き出そうdreaming way」って文字通り"歩夢"じゃないですかー

連打すると

「歩き出そうdreaming way」って文字通り"歩夢🎀🎀🎀🎀🎀"じゃないですかー

たーのしーー!!

現状では、「歩夢歩夢」という行には対応できていません。
コードレンズは2つ表示されるのですが、どちらをクリックしても先の歩夢に🎀追加となりました。

終わりに

VSCodeの拡張の作り方が気になり、ハンズオンテキスト基礎編に沿って素振りしました。
コマンドとコードレンズは完全に理解した!

LSPが使えないと自由度低いのかなと思っていましたが、「基礎編」の内容だけでも結構色々とできそうです。
Python関係の拡張のソースをいくつか覗いているのですが、この延長で実装されている"お手本"も見つかりました。
今回のどうかしてるぜ拡張がmarketplaceに並ぶかどうかは未定としか言えませんが、VSCode拡張自作に向けて順調な滑り出しを切ったと思います。

ハンズオンテキスト制作者の皆さまに感謝申し上げます。

P.S. なぜ 🎀 を追加するの?

歩夢と🎀の関係、当然の疑問だと思います。
歩夢という文字列は、ニジガク(ラブライブ!虹ヶ咲学園スクールアイドル同好会)の上原歩夢ちゃんを指しています!
そしてラブライブ!のメンバーには対応するemojiがあるそうなんです。

アンサー:歩夢ちゃん=🎀なんだぜ。エイリアスなんだぜ!


  1. この emoji を追加する理由はアニメが絡むので本編では扱いません。全くピンとこない方は「Hello World」や「hoge」「fuga」みたいなものだと思ってください。界隈の慣例です。理由を知りたい方は(この脚注の上の)P.S.をどうぞ!

  2. といっても「悪魔の証明」だと思うので、知っている方いたらお知らせください!

  3. VSCode 拡張のサンプルリポジトリにもありました:https://github.com/microsoft/vscode-extension-samples/blob/133fa26af64ba8760559c5a06299953673d60763/codelens-sample/src/CodelensProvider.ts

  4. JavaScriptのオブジェクトは JavaScriptにおける連想配列でハマりました。全てをお話しします - nikkie-ftnextの日記 で転んで学びました

スペースレポート | #pyconapac2022 の面白そうなトーク語り part 1 #PyConAPAC #にっきーは語りたい

はじめに

みんな、ウタだよ!」、nikkieです1

先日、PyCon APAC 2022のトークについて、スペースで「ここが面白そう!」と語りました。
スペースでのアウトプットをブログにまとめます。

目次

PyCon APAC 2022とは

APAC(アジア・太平洋地域)のPython Conference、今年はTaiwanのコミュニティが主催です!
この週末9/3(土)・9/4(日)オンライン開催!

発表は事前録画形式で行われます(Q&Aがliveみたいです)。
実は私スピーカーなのですが2、動画はYouTubeに上がると聞いています。
これはつまり、YouTube字幕の力に頼れるということではないですか!!

さらにオンラインなのでスライドは最前席で見えるわけです。
英語の聞き取りはあまり自信がないですが、オンラインの利を活かして楽しめる予感でときめいてきました!

「テクノロジーの力でそんなにハードル高くないかも」と思ったそこのあなた、ぜひ一緒に飛び込みましょうぞ!

スペース:PyCon APAC 2022をにっきーは語りたい

Talks Highlight | Part 2というツリーから、「面白そう!」と感じたものを語りました。

ツリーで気になったトークの詳細は https://tw.pycon.org/2022/en-us/conference/talks で確認します。
ここは時刻も載っていて分かりやすいですよね。
時刻はブラウザの標準(なので私の場合はJST)だそうです、便利!

参加するに当たって「どんなトークあるのか知りたいな」→トークのリスト見るとテンション上がるのでスペースでわいわいやっちゃえ!とスペース化しています。
別のアウトプットにまとめるのも想定していたので「聞く人いなくても録音残ればいいや」という思いでやりました。
スペース中や録音を聞いてくださった方から反応があり大変嬉しく思っています。わたし、幸せだよ!

では、取り上げたものを以下に紹介します。

Data Oriented Programming with Python (9/4 11:35〜12:05 JST)

https://tw.pycon.org/2022/en-us/conference/talk/240

DOP(Data Oriented Programming)をPythonでどうやるかを紹介するトーク
スライドがもう見えるんです!

DOPはClojureにインスパイアされたアプローチということで、スライドを眺めていったところ、OOPでクラスを定義するのとは全然違うアプローチでワクワクしました。
関数があって、言語プリミティブなデータ型でデータを表現するアプローチ、Flaskのサンプルコード例までありますので、気になった方ぜひ一緒に聞きましょう!

参考書籍は『Data-Oriented Programming』、こちらも興味を持ちました。

When is an exception not an exception? Using warnings in Python (9/4 14:25〜14:55 JST)

https://tw.pycon.org/2022/en-us/conference/talk/252

こちらのトークをされるReuvenさん、私は勝手にPythonのYodaだと思っています。

Reuvenさんのトークは毎回学びがあるのでマジでおすすめです。
こちらはUS PyCon 2021と同じタイトルのよう3ですが、warningsの扱いを知りたい方、おすすめです!

Function dissection lab -- learn how functions work by examining their innards (9/4 14:25〜14:55 JST)

https://tw.pycon.org/2022/en-us/conference/talk/253

もう一本Reuvenさん!
2本登壇はすごいですね👏

こちらは関数が動く仕組みを掘り下げるトークのよう。
言われてみると、関数は引数の適切な数を知っていたり(TypeError送出)、デフォルト値を扱えたり、どう動いているのか結構不思議ですね。
short answerは「関数はオブジェクトだから」とのことですが、オブジェクトの属性(attribute)でどうやっているんでしょう?
ん〜、これは楽しみすぎる!!

Code coverage through unit tests running in sub-processes/threads: Locally and automated on GitHub (9/3 11:45〜12:15 JST)

https://tw.pycon.org/2022/en-us/conference/talk/243

マルチスレッドやサブプロセスを使って単体テストを実行したときのテストカバレッジの測り方についてのトーク
こちらもスライドがすでに公開されています!

coverage.py(coverageとも)の導入から始まり、マルチスレッドやサブプロセスで単体テスト実行時の設定までサポート。
サププロセスで実行する際はcoverage.pyの設定がハマりどころみたいですが、このトークでカバーされます!
coverage.py、完全に理解できそうですね!

終わりに

PyCon APAC 2022のトーク楽しみですね語りスペースのレポートでした。
週末に迫ってきています。
私は非常に楽しみです!

トークは全部で50本あり、まだまだ見始めたばかりですので、開催までちょくちょく30分スペースをやろうと考えています
事前録画だから登壇準備は終わっていて、その分こういうアウトプットができるのが楽しい&嬉しいですね。

イベントレポート | #pyconjp 2022 Day -48 有明の地でトキメキ探し

はじめに

㊗️!ニジガク開催👏1 nikkieです。

国内最大規模のPythonのカンファレンス(PyCon JP)が今年は10月に有明の地で開催2されます!
そして、有明と言えばニジガク(ラブライブ!虹ヶ咲学園スクールアイドル同好会)!
お休みの日にリフレッシュを兼ねて、PyCon JP 2022会場付近のニジガク関連スポットを巡りました。
そのレポートです。

目次

PyCon JP 2022の会場、TOC有明

PyCon JP 2022は10/14(金)〜16(日)の3日間、TOC有明コンベンションホールで開催とのことです!

でかいビルでした。どーーーん!!3

コンビニだけでなく飲食も充実していそうです(雰囲気はDjango Congress JPで訪れたサイボウズさんのオフィスが入っているビルに近そうです)。

TOC有明アクセス

1ヶ月半後は詳細に思い出せない可能性があるので、自分用メモを残します。

りんかい線「国際展示場」駅から、虹ヶ咲学園東京ビッグサイトの方へ向かいます。
ビッグサイトの正面に出たら、ビッグサイトを左に見るように進んでいきます(東京テレポート駅の方へ)。
パナソニック社の前を進んでいくとTOC有明のビルが見えてきます!

今回渋谷から向かったのですが、電車の乗り換えは渋谷〜大崎〜国際展示場がよさそうです。
りんかい線直通の埼京線を渋谷で待つ必要はないと学びました。
山手線や湘南新宿ラインで大崎に向かい、そこでりんかい線4に乗り換えるのを次回は試します。

※これ以降はアニメに極振りしています

ニジガクの舞台有明、トキメキをさがして

「ニジガクメンバーに会いにお台場・有明 空の旅!」

ニジガクは以下のキャンペーンで、アプリ「舞台めぐり」を使ったデジタルスタンプラリーを開催中です!

●コラボ記念!デジタルスタンプラリーinお台場「舞台めぐり」も楽しめる!

開催期間は「2023年9月30日(土)」までなので、PyCon JP 2022会期中も対象!

TOC有明付近では、以下の3人に会えました!(徒歩のケース)

Pythonもニジガクもどっちも好きって方は、こちらのコラボツアーが渡りに船!
カンファレンスの前日やカンファレンスが終わった翌日に有明・お台場めぐりを楽しめます!!
やばいですよ、偶然が重なって、好きな技術も好きなアニメもどっちも楽しめる状態です!
こういうときはきっと「神ってる」って言うんですよね!(そして各位「優勝」してくだしあ)

有明ガーデンコラボ

8/31(水)までですが、有明ガーデンパーク隣接の建物(有明ガーデンギャラリー)で「ニジガクCAFE at 有明ガーデン」開催中です。

カフェ以外にもトキメキSHOP、キッチンカー、(舞台めぐりとは別の)スタンプラリーと盛りだくさん!

有明ガーデン自体は飲食店充実してそうでした🤤
TOC有明からは国際展示場駅を挟んで逆方向なので、移動距離はややあります(1駅ゆりかもめも選択肢)。
会期中有明のホテルを利用するのもありですよね〜

りんかい線コラボ

りんかい線ゆりかもめの1日乗車券!(他にグッズも)
特別な日(※PyCon JP 2022当日)に使うのもありですね。

「お台場スカイツーリストインフォメーション」ほか、オンラインでも買える!

終わりに

お台場・有明はニジガクで多いに盛り上がっているんですね。
2期5話が好き(というか無限ループ中6)なので巡礼後にも見たのですが、有明で見かけた風景が登場してトキメキもひとしおでした。
これまで聖地巡礼してきた中で一番アクセスしやすいお台場・有明、巡礼して視聴/視聴して巡礼と繰り返すと、発見がつながってこれはハマっちゃいそうです〜

ニジガクはけっこういいなと思っていた作品でしたが、PyCon JP 2022 有明開催で私の中ではきれいにつながりました。
会場で僕と「ヒトリダケナンテエラベナイヨー」

おまけ:Day -48って?

10/14がDay 1、10/15がDay 2ですよね。
逆方向を考えると、10/13(前日)はDay 0、10/12(2日前)はDay -1と言えるのではないでしょうか。
トキメキ探しを実施した8/26は49日前なので、Day -48です!😎

>>> from datetime import date
>>> date(2022, 10, 14) - date(2022, 8, 26)
datetime.timedelta(days=49)
>>> (date(2022, 8, 26) - date(2022, 10, 14)).days + 1
-48

  1. PyCon JP Blog: PyCon JP 2022の会場、日程が決定しました!

  2. Day -48に会場前にたどり着いたので、スピーカー遅刻はなくなりましたね。ほっ

  3. 大崎駅 時刻表|大崎駅|りんかい線の各駅・路線図|駅情報・時刻表・運賃|お台場電車 りんかい線

この夏行きたい!イオンシネマ西大和 #アイの歌声を聴かせて

はじめに

シオンさん ああかわいいな かわいいな、nikkieです。
いやー、連日暑いですねー。

Blu-ray・DVD発売アドベントカレンダーをこの7月に企画するなど、『アイの歌声を聴かせて』を全力で推してまゐるnikkieですが、今回はこの夏行きたいアイうたゆかりのあの地について思いの丈を綴ります!

目次

奈良のイオンシネマ西大和さんでアイうた上映中!

この夏行きたい地というのは、イオンシネマ西大和さんです!

8/21(日)で閉館なのですが、最後にアイうたを上映してくださっています。
これは観に行きたい!

(略) 2022年8月21日(日)をもちまして、営業を終了することになりました。

イオンシネマ西大和といえば👉「動きます」

『アイの歌声を聴かせて』は2021/10/29封切り、「最後にきっと、笑顔になれる」、全人類マジで見てくれ!というステキ作品なのですが、公開直後劇場はガラガラ😱
お客さんの入りが芳しくなく1、「これは1ヶ月経たずに上映館がなくなってしまう、やばい!」とハーモナイザーは思ったわけです。
そんなときに動いてくださったのが西大和さん!(上のツイート参照)
この動きに加え、ハーモナイザーの口コミ効果もきっとあって、潮目が変わり出したように思います(だって、この8月に映画館で見られるんですよ!円盤も配信もあるのに!!)

We've Got Nishiyamato-san、本当にありがとうございます!😭

西大和さんのアイうた愛

イオンシネマ西大和さんのツイートを #アイの歌声を聴かせて で検索すると、もう愛がすごいんです😭

シオンを演じた土屋太鳳さんからの素敵すぎるサプライズ!

2022/8/5からの再上映に合わせて届いたお花とバルーン

差出人は芦森詩音よりとのことですが、土屋太鳳さんからだったんです!!😭

「動きます」は土屋太鳳さんにも届いていたんですよ!
これはやばい!素敵すぎる!!😭(私は「これ、アイうたじゃん」とつながりを感じました。気になる方はぜひご覧ください)

個人メモ:西に行くなら

関西に行くならアニメ関連でこんなに行きたいところが!

塚口サンサン劇場さん

8/19(金)〜アイうた上映!

西大和さんと上映期間一部重なるんですよね。
音響に定評のある映画館ということで、こちらでもアイうたを観てみたいです〜

響け!ユーフォニアム × 京阪電車

たびたび宇治に通ってますが、今年も京阪電車コラボが来ました!

ラッピング車両や等身大パネル、スタンプラリー!
いつ行こうかな〜(西大和さんからはしごかな〜)

であいもん × 叡山電車

"パパ活"から始まる超絶怒涛のハートフル"連続テレビ小説"であいもん、叡山電車とコラボグッズやスタンプラリーが展開されています。

一果ちゃんと一緒、めっちゃ楽しかった!

終わりに

この夏行きたい!イオンシネマ西大和さん。
アイうたの聖地だと思っています。
うおー、ほとばしるアイうた愛を五感で感じたい!

追伸:西大和さんのTwitterは10万フォロワー目指されているので、みんなぜひフォローしてくれよな!