PyCon JP 2020 チュートリアルに参加しました: 準備編

この記事はPyCon JP 2020 Tutorialの準備から当日の様子をお伝えします。準備から当日までいくつかの記事にしました。

8/30(日)に開催されたPyCon JP 2020 チュートリアルはお陰様で無事に終了しました。ご参加頂いた皆さん改めてですがありがとうございます。

オンラインハンズオンで1日まるまる行う話として、自分はもちろん、TA、PyConJPスタッフもはじめての経験だったはずです。オンラインの登壇はまだまだ何をするべきか悩むことが多いので、現在進行の様子を含めて書き残そうと思いました。

この記事ではチュートリアルの準備の様子です。依頼されてからどうやって準備したかをまとめます。

機材の用意

オンライン会議なり登壇するときに、音の重要性はよく感じていました。PyCon mini Shizuokaではそこをに気が付いていなかったのでうまくできなかったこともありましたし、PyCharityでLT登壇したときも、ヘッドセットのマイクが扱いづらくて悩みました。

Logicool G ゲーミングヘッドセット 有線 G331 2.1ch ステレオ 3.5mm 軽量 ノイズキャンセリング 単一性 フリック式マイク PC/PS4/Switch/Xbox/スマホ 国内正規品
B07NDN4VJG

ASIN : B07NDN4VJG
Amazonで詳しく見る
Powered by Amazon Quick Affiliate (JP)

ゲーミングヘッドセットを購入してから、数時間の勉強会や飲み会レベルなら問題ないのですが、集中して1日話続けるには難しいのではと感じました。気になる点は以下になります。

  • ヘッドセットのマイクの物理的な扱いに苦労する
  • ヘッドセットのマイク音量が少なすぎて調整が難しい
  • 密閉型ヘッドセットだと自分の喋り声が聞こえない
  • 1日ヘッドセットをつけ続けるのが難しい

これらを解決するために、オーディオインターフェイスと単独のマイク(ダイナミックマイク)を導入しました。WEB会議アプリ側でマイクの音量調整があまりできなかったのでハードウェア側で操作することにしました。音質の向上もできるはずです。

この辺の詳しい様子は機材編でまとめます。 -> 機材編

結果としては導入して正解でした。オーディオインターフェイスは配信環境的には申し分なくて、講師としてしゃべる側はとても快適でした。テスト時にも音が良いと言われたので品質自体も良くなったと思います。

あとマイクのダイレクトモニターが良くてヘッドセットのときより話しやすさは良くなりました。フィードバックあるだけで全然違いますね。

文字起こしシステムを作る

もともと、シビックテックのカンファレンスでUDトークというサービスを見たときに面白そうに感じていたシステムですです。少し前に、Twitter上で落合先生が似たようなことをGoogle音声文字変換アプリをPCで映す方法を試されていたので、近いことをやってみたいと思いました。

技術的な話は別記事にまとめます。 -> 文字起こし

(この写真の左下にAndroidスマホを設定している)

YouTubeには字幕の自動起こし機能があるのですが、インプットの質で変わるので微妙に感じることも多いです。なのでマイク音声だけを直接文字起こしのシステム側にインプットすれば、認識や変換精度は上がるはずです。

ただやってみての感想ですが、専門用語やしゃべり方の癖で文章的には支離滅裂に見えてしまって難しく感じました。

試しにやったので試行錯誤した結果として楽しんでもらえたらと思います。

資料作り

当日までの資料作成は、もくもくと作業をしていました。当初はPython駿河で開催したSlackbotのハンズオンの流用をしていたため、Slackbotでの作業はほとんどありませんでした。

PyCon JP側から、pytestやSphinxの話題を入れてほしいとのオーダーがあり、Slackbotのコードを使って体験できるような構成にしています。Slackbotをネタにテストケースを書きたかったので、Slackbot側のbotとしての機能を分離するなどプログラミングし直した部分もあります。

とくにpytestの部分で使ったmonkeypatchのモック作成は便利だったので、日頃から使いたいしpytestをテーマにした勉強会で掘り下げてみたいですね。

Monkeypatching/mocking modules and environments — pytest documentation

Slackbotのコード自体は利用するAPIもライブラリもほぼ変えていません。ただbotの返答を共通のインターフェイスにしたくて、そこだけ書き直しました。ボットをモジュール化することを目指しています。

pycon-jp-2020-tutorial/botrun.py at master · py-suruga/pycon-jp-2020-tutorial

(当日の質問に、この部分で使うボットのモジュールは、基底クラスの関数として定義して、継承している?という話がありました。クラスを使ったインターフェイスの話だと思いましたが、そこまではやっていませんがインターフェイスという点では近いことをしていたと思います。)


...と、ここまでは余裕を持っていたのですが、(本業が炎上気味だったりして作業時間が減ってしまったうえに)7月末で終了したLivedoor天気のAPIが使えなくなってしまう事態があり、半泣き😭で作り直ししてました。

天気情報 ヘルプ - livedoor ヘルプ

そういったトラブルもあって詰めのところで時間がギリギリになってしまいました。PyCon JPのスタッフさんや、TAとの打ち合わせやリハーサルをやるような時間に未完成の状態で、レビューする時間がほとんどなかったので心配だったと思います。PyConJPチュートリアルスタッフの方やTAのお二人にはひやひやさせてしまって申し訳ない。

そんな中で、Python駿河/Unagi.pyのメンバーにはレビューしてもらいとても助かりました。チュートリアルを開催する話をしたときに、参加できないけどできる限り手伝うよ行っていただいたメンバーには感謝しかいないです。TAの打ち合わせでも気が付かなかった部分を教えてもらい反映もできました。

また、PyCon JPのスタッフの@huideyerenさんにも手助けいただいたり(資料のPR頂けて助かりました)、PyCharityのSlackチャンネルで無理言って@takanoryさんにもレビューしてもらったりと、Python界隈の方々に助けてもらいっぱなしでした。

チュートリアル資料のコントリビューター一覧


トラブルがあったのでSlackbotの機能自体の紹介ができなかったのも残念です。もし間に合っていたらBlock Kitを使ってインタラクティブなbot実装も考えていました。

天気予報のbotなら地域指定や予報表示をBlock kitで実装したかったです。

以前のハンズオンから流用したbotなので、一般的なサービスのAPIがメインだったのですが、他の機能実装に使えそうなネタをもっと入れてもよかったと思ってます。bot側にもっと機能をもたせて業務の基盤との連携ができるような手段の紹介もしてみたかったですね。

この辺はまた今後の課題です。業務や静岡のPythonコミュニティでもSlackbotを使い倒したいのもあったので、ここはまた改善してどこかでやってみたいですね。

作業の環境

チュートリアル資料の作業環境は、GitHub + VS Code + Sphinxを使いました。チュートリアルでSphinxを扱うのであればドキュメントもSphinxでやるべきだろうと、そうしました。

普段はMarkdownを使っているのもあり、reStructuredText(reST)の記法はMarkdownと違う部分はありますが、書き進めると慣れていけると思います。

Sphinxの機能としてはドキュメントの構造化しやすく、TOCが自動的に生成されるので気軽にドキュメントをかけるツールです。(この辺の説明はPythonプロフェッショナルプログラミングにもあるので一読オススメ)

Pythonプロフェッショナルプログラミング 第3版
4798053821

ASIN : 4798053821
Amazonで詳しく見る
Powered by Amazon Quick Affiliate (JP)

資料を公開する場所としてはRead the Docsを使いました。こちらもSphixと連携するサービスで少し設定をかいてサービスにリポジトリを登録するだけですぐに利用できます。

トップページ | Read the Docs

Read the Docsはsphinxのテーマも公開しています。いろんなプロジェクトで採用されているので見たことがある方も多いはずです。チュートリアルでも資料やSphinxの章でも使いました。

Read the Docs Sphinx Theme — Read the Docs Sphinx Theme 0.5.0 documentation

VS CodeでreSTを書くときには、reStructuredText拡張を利用しました。snippetやlinter機能が便利です。

reStructuredText - Visual Studio Marketplace

資料としてWEBサイトのリンク作成を良くしていましたが、Chrome拡張のTabcopyが便利でした。reSTのリンク記法を設定することで楽にリンクが生成できます。(手動で設定する必要があります)

TabCopy - Chrome ウェブストア

資料作成の課題管理はGitHub issue+boradを使いました。boardははじめて使いましたが、issue closeしたら自動的にボードのカラム移動をする機能や、noteを書いてissue化する機能は便利でした。メモ書きをnoteで行い、あとでissueにしてまとめます。

プロジェクトボードについて - GitHub Docs

実際に作業していたボードはこちら -> チュートリアル準備

board自体はTrelloを普段から使っているのもあって引っかかることもなかったのは良かったです。

ツールには恵まれていたと思います。普段から慣れ浸しんだ環境でできたのも良かったです。

まとめ

準備期間中は部屋に引きこもりすぎて精神はちょっと怪しかった(もう半年以上県外にも出ていなくて結構溜まってますね...)のですが、作業自体は快適そのものでした。対外コミュニケーションもSlackやZoomを使うのも当たり前になりましたし。

余りに人と会わなくなっていたのでさみしさもありましたが、この期間にお会いしたPyConJP方面の方や静岡Pythonコミュニティに助けていただけて、それだけでつながりの大切さを感じます。同じくデータ分析チュートリアルを担当されていた関西のPythonコミュニティの方々ともよく話をさせてもらいました。

チュートリアル参加も良かったのですが、Python駿河のSlackbotハンズオンから見ていただいていたSlackのSDK開発をされている方に見ていただけたのはとてもうれしいことでした。

評価していただけるだけでもうれしかったのですが、書籍といったら、そういえば最近は技術系の同人誌の盛り上がりもあるし、いろんな方の本を見ていてやってみたいと思っていたので... 考えてみようか🤔

次は当日の様子と1日がかりのチュートリアル講師をしてどう感じたかをまとめます。

About Me

買ったり作ったり考えたり試したの日々の記録です