Raspberry Pi もくもく会 レシピ集シリーズ 第2弾!を技術書典 応援祭で頒布しています

主催しているRaspberry Piもくもく会の有志で執筆した同人誌『Raspberry Pi もっと食べたいレシピ集』を、「BOOTH」と 「技術書典 応援祭」で、頒布していますので、中身を紹介したいと思います!

Raspberry Pi もくもく会 レシピ集シリーズ 第2弾!!

ということで、

もくもく会メンバー厳選の、Raspberry Pi を「もっと」楽しむアイディア満載のレシピ集です。 実際にRaspberry Piを使って試したり、作ったものを追体験できるレシピを図などを交えてわかりやすく紹介しています。 前回のvol.1では初心者の方を対象にしたレシピが多く掲載されていましたが、今回のvol.2では初心者の方から熟練者の方までを対象にし、また対象とする領域も幅広いレシピを揃えました。

早速、中身を少しずつ紹介したいと思います。

内容紹介

1. Raspberry Pi Tips集

  • Visual Studio Code の 便利な Extension(拡張機能
    VSCode の Extension 「Remote Development」を使用すると、ローカルPC上で簡単に Raspberry Pi 上のファイルを編集したり、ファイルを転送することができるので大変便利です。インストールの仕方から使い方まで細かく解説しています。

  • 100均リモコンで Raspberry Pi を自動シャットダウン
    ダイソーなどの100均ショップで売っている「Bluetoothリモートシャッター」をつかったレシピです。すでにラズパイ界では定番のレシピとなっていて、気軽に試せるレシピとなっています。

2. Raspberry PiAWS IoT の双方向連携

あなたは一人暮らしのサラリーマン。 部屋に温度センサーを取り付けて、いつでもスマホから現在の室温を見れるようにしています。 夜遅くやっと仕事が終わりました。季節は晩秋。 スマホから部屋の湿度を確認すると寒そうです。「エアコンつけるか〜」 あなたはスマホからエアコンをONにしました。 (本より抜粋)

このような、デバイスに接続されたセンサーデータをクラウド上に送信して、可視化・分析するといったよくあるケースに、Raspberry PiAWS IoT を用いて解決してるレシピです。

3. Raspberry Pi を写真管理サーバーにする

だれしも、撮ってはみたものの管理しきれていない写真ファイルを大量に持っているものです。そして、持て余している Raspberry Pi も1台や2台お持ちでしょう。 (本より抜粋)

あります!ありますね! オンラインギャラリーを構築するオープンソースの Webアプリケーション Piwigo を使用して、 Raspberry Pi を写真管理サーバーにするレシピです。 サーバー構築にチャレンジしたい!という方にもぜひおすすめのレシピです。

4. Video Core IV で Hello world してみよう

Raspberry PiGPU(QPU) はドキュメントが公開され時間が経ったこともあり、利用する環境が整ってきたようです。 github で公開されているサンプルコードなどをもとに GPU(QPU)の使い方を探っていくレシピになります。 主にアセンブラを使用してのプログラミングになりますが、丁寧に書かれているので、実際に試してみて体験するのもよいかと思います。なによりラズパイでできるのが気軽でいいですね!

5. Unicorn HAT HD を使った電光掲示板作成

簡単だけど見た目に映えるのがやりたい!という初心者さんに最適です。

f:id:electricSheep:20200314125115p:plain

f:id:electricSheep:20200314160131p:plain

解説も会話形式で楽しく読み進めることができます!

6. パルスオキシメーターを作る

Raspberry Pi Zero WH を使ったパルスオキシメーター(SpO2 と心拍数を測定できる装置)の作成を通じて、Raspberry Pi に I2C 通信対応のセンサモジュールを接続し、USB テザリングで接続した Android スマートフォンからセンサの値を確認する方法を紹介するレシピです。 ちょうどこの本を執筆中に、アフリカ最高峰キリマンジャロ(5895m)にも登頂を成し遂げている著者による自作山登りガジェットの今後が楽しみです

f:id:electricSheep:20200314125806p:plain

7. Raspberry PiQR コード自動改札機を作ってみた

既刊「 Raspberry Pi いますぐ食べたいレシピ集」 4.QR コード自動改札を作ってみようとした話 の続編です。 前回は残念ながら完成に至らなかったのですが、今回でついに完全レシピと前回反省を踏まえて試行錯誤した知見がつまっている内容です。 気になる方は、ぜひ既刊「Raspberry Pi いますぐ食べたいレシピ集」と合わせてお読みください。

8. UML を使って Raspberry Pi アプリを作る

UML」という記法を使ってソフトウェアの設計モデルを作成し、そこから自動生成した C のソース・コードで Raspberry Pi を使った機器を動かした事例を紹介しています。 設計モデルの作成やソース・コードの自動生成にはオープンソースの「BridgePoint」というツールを、 素材には、BridgePoint のサンプルアプリケーション「GPS Watch」を使用しています。この章を読み進めると、Raspberry Pi を使った組み込み機器のモデル駆動開発を学ぶことができるかなかり濃いレシピとなっています。

9. USB アクセレーターで作るリアルタイム画像分類器

USBアクセラレータ は、TPU を Raspberry Pi や PC 上で使えるようにする USB アクセサリーです。 汎用的な用途に使用されるCPUやGPUとは違い、ディープラーニングの高速化に特化するために開発されました。 この章では、USBアクセラレータ [USB-Accelerator] を使用して、Raspberry Pi 上で動くリアルタイム画像分類器の作成方法を紹介するレシピになります。

付録 A: 台北電気街おさんぽマップ

いつもの秋葉原からちょっと足を延ばして台北の電気街を紹介します。 よく台湾に出掛ける著者が、パソコン、オーディオやカメラから 電子工作のお店まで、なんでも揃う台北の電気街マップを作ってくれました。 写真もついていてわかりやすいので、台湾に行く際には必須のマップになること間違いないです !

おわりに

いかがでしたか? 気になるレシピはありましたでしょうか? 難しそうだなーと思えるレシピもこんなことができるんだ〜とRaspberry Piの可能性を知ってもらえたらと思います。

Raspberry Piはもともと教育用に作られたこともあり、安価で手に入り、なにか試してみたい、勉強したいといった時にぴったりです。 この1台で、電子工作から、サーバー構築、GPUプログラミングまでなんでも気軽に試すことができます。 ぜひ、みなさんもお気に入りのレシピを見つけてお試しください。

本は「BOOTH」と 「技術書典 応援祭」どちらでも購入できます! (物理本の販売はBOOTHのみです)

Raspberry Pi もっと食べたいレシピ集 Vol.2

Raspberry Pi 今すぐ食べたいレシピ集 Vol.1

raspimoku.booth.pm

techbookfest.org

  • 読後アンケートに回答いただいた方には、オリジナル壁紙をプレゼントしていますので、ぜひご協力お願いします!

残念ながら開催中止となった技術書典8ですが、技術書典8で出展予定だったサークルの本がオンラインマーケットで購入できる 技術書典応援際が開催されています! 他にもたくさん素敵な本がありますので、ぜひチェックしてみてください!

techbookfest.org

登山中の呟きをテキスト変換して振り返りたい

この記事は PyLadies Japan Advent Calendar 2019 - Adventar 6日目の記事です。

PyladiesTokyoでは、飲み会の席で突如としていろいろな部が発足されていますが、その中の一つがmountain girl。

GTUG Girls - connpass 遠足部さんと共同で、毎年、1,2回山に登っています。

直近では、三頭山にいってきました!当日の様子は @yuzu_afroさんがこちらで詳しく書いてくれました。

www.yamareco.com

さて、山は楽しく、余裕がある場合は、皆でわいわい話しながら登っています。 が、実際登っている時は辛い時もあります(体力ないため)。 途中、あまりの辛さに完全無言になっているときも。

そんな時、自分が、

寒い、、、 暑い、、、 人はなぜこんな辛い思いをして山に登るのか。。。

を繰り返しつぶやいていることに気づきました。

そこで、あとから自分がどんなことをつぶやいていたか振り替えれたら面白いかも!と考えどうやって実現しようかなーと漠然と考えていたところ、 先日参加した PyLadies Tokyo 秋合宿 2019 - connpass で雑に音声をテキスト変換してくれるサービスないかなーとつぶやいたところ、いろいろあるよ!と教えてもらいました。 その中の一つ、Amazon Transcribeというサービスを試してみたところ、とても手軽に使えそうだったので紹介します。 ちょうど、11月21日に日本語にも対応したようです。

aws.amazon.com

Amazon Transcribe は、開発者が音声をテキストに変換する機能をアプリケーションに簡単に追加できるようにする、自動音声認識 (ASR) サービスです。Amazon Transcribe API を使用して、Amazon S3 に保存されたオーディオファイルを分析して、音声を文字起こししたテキストファイルを返すようにできます。

手順は以下の3ステップで簡単にできました。

  1. 音声ファイルを作成する。
  2. 音声ファイルをAmazon S3に保存する
  3. Amazon Transcribeで音声ファイルをテキストに変換する

1. 音声ファイルを作成する。

  • とりあえず、Androidスマホアプリの「ボイスレコーダー」で試しにつぶやいて音声ファイルを作成します
  • 山でつぶやいたであろう、「寒い、暑い、つかれた」とつぶやいて録音

2. 音声ファイルをAmazon S3に保存する

f:id:electricSheep:20191208111603p:plain

3. Amazon Transcribeで音声ファイルをテキストに変換する

  • (1) Create transcription job クリック f:id:electricSheep:20191208112123p:plain

  • (2) nameは適当な名前をつける。 f:id:electricSheep:20191208112136p:plain

  • (3) 2でS3にアップしたファイル名を指定する。 format-optional は今回自分がupしたフィアルがmp3だったのでmp3を選択。

f:id:electricSheep:20191208113617p:plain

Output data はとりあえずデフォルト設定のままで、 Create ボタンをクリック!

  • (4) Statusが Conplete になればOK f:id:electricSheep:20191208112507p:plain

  • (5) 音声がテキストに変換された f:id:electricSheep:20191208112600p:plain

  • (6) Amazon Transcribe APIを使用すれば、自動でいろいろできそうです f:id:electricSheep:20191208113636p:plain

こちらのAPI+Pythonを使って、実際に登山の際の呟きを収集して、テキスト変換し分析するのも面白いなーと思い今後チャレンジしてみたいと思います! リアルタイムに変換する必要はないので、音声収集から、自動で変換まで、raspizeroを使ってやろうかなーと考え中。 ついでに気温とかも収集できそう。

さて、PyladiesTokyoのmountain girlですが、来年は、山小屋に泊まろうかーと話しています。 興味ある方は、一緒にチャレンジしましょう。 登っている時は辛い時もありますが、やっぱりやみつきになる楽しさがあります! 普段PCしかみていないので、こういった気分転換は本当に必要だなーと感じる今日このごろ。

f:id:electricSheep:20191208114141j:plain
三頭山頂上で富士山を眺めながら食べるおにぎり最高。しかしめちゃ寒かったので、今度コンロもってラーメン作りたい。

OS自作の会 1日目

先日、(公開するのを忘れいてた。。)先月OS自作の会を開催したので、そのレポート&忘備録です(やったことを書いておかないとすぐ忘れることが判明!!)

なぜOSを自作しようと思ったのか

Cpython インタプリンタソースコードを眺めいたところ、システムコールなどがでてきてOSの仕組みに興味をもち、自作OSで有名なこの緑本を購入しました。 Amazon CAPTCHA

PyladiesTokyoのmeetup後の2次会で話したところ、なんとこの緑本を持っている方がすでに2名いて、話が盛り上がり、皆でやろうということになりました。なぜなら分厚くで、難しそうで一人では挫折しそうだったからです;;

ということで、8月10日にRaspberry piもくもく会を一緒に主催している @yuzuafroさん、会社の同僚の @meganehouseを誘って、第一回を開催しました!

第1回は、お盆の時期にもかかわらず5名あつまりました。

OS会の進め方

  • 各個人がそれぞれ本にしたがってもくもく進めていく
  • わからないところは、他の人に聞いてわかる人が答える
  • 皆がわからないところは、皆で調べる
  • 自分がつまったところはSlackで共有する。(他の人も同じところでつまる可能性があるため)

自分がやったところまでの忘備録

環境構築

  • 本はWindowsをベースにしているのでmacで環境構築&作成したOSを動作させるためには、以下参考に環境構築をする必要あります。 基本的には上記ページのREADMEの通りにやればOKです。

github.com

アセンブラでimgファイルを作成する

とりあえず、 hello world の部分のみ変更して、make runしてみる。

  • 本では、著者作の「nask」というアセンブラを使用している。これは「Nasm」という有名なアセンブラを真似て作成されている。
  • 基本的には以下手順でimgファイルを作成する(macの場合)

  • 本にはさらっとかかれているアセンブラですが、ここである程度理解しておかないと厳しそうです、

2週目(8-14日目)の概要に以下のようにかかれている通り、

1章で苦労したかいがあって気がつけばたくさんの財産を手に入れています。C言語の基本文法もほぼマスターし終わって、アセンブラもこの本の要求レベルに到達してしまっています。

1週目で、C言語アセンブラをマスターし終わる想定ですw

私の知識はというと、下記くらい。

Cやアセンブラを全くやったことのない人は、この本だけでは厳しいかもしれません^ ^;。

その場合以下が参考になるようです。(by @meganehouser) https://www.amazon.co.jp/dp/B078J4TNT1/

ただ、一通り本をやってからじっくり学んでも大丈夫そうです。

その他参考&メンバーが共有してくれた内容(一部抜粋)

tech.nikkeibp.co.jp

おわりに

  • 参加者全員、第1章の環境構築をしてエミュレータhello, world をするところまではできました!
  • 早い人は、第8章まで進んでいました!
  • 難しいけど皆でやれば怖くない!

実は本日第2回を開催しています!

IPLをアセンブラで書いた経験がある方や、RTOSを作ることを職業にしている方も加わってくれ、頼もしい! くじけそうだけど、頑張ろう。

Pyladies Tokyo スタッフ合宿参加レポート!

6月22日〜23日にPyLadies Tokyo スタッフ合宿に行ってきたのでその様子をレポートします!

pyladies-tokyo.connpass.com

Pyladies Tokyoのスタッフは、日頃Slackでやりとりをしていて、タスクをTrelloを使って管理しています。  (* Trelloは、「ふせん」のような感覚で使えるタスク管理ツールです。)

ただここ最近は、メンバーが皆仕事や家庭もあり忙しいなかで、なかなかタスクが進まない状況でした。そこで、皆で一気にあつまって、集中してやろう!ということで、合宿を計画。 スッタフ以外にも手伝ってくれる人枠をもうけ、応募したところ、@こんの さんと @kanan が参加してくれました!

場所は、星野リゾート磐梯山温泉ホテル にお世話になりました。 かなり、快適&スタッフ合宿よかった!のでいろいろお伝えしていきます。

まずはスタッフ作業

宿について案内されたのは、広々とした会場。wi-fiも使えます。 会議室を到着から翌日13時までフルで使わせていただきました。

f:id:electricSheep:20190630153108j:plain
今回お世話になる星野リゾートさんの紹介!

星野リゾートさんでは、開発者を募集しているそうで、開発合宿プランなどの企画も現在上がっている?そうです。

f:id:electricSheep:20190630161833j:plain
会場広い!机ありがたい!

普段はTrelloを使っていますが、今回は今後開催するmeet upのテーマ決めなどアイデア出しの部分もあったので、実際に模造紙と付箋をつかって、スタンディングで話あいました。 やはり、スタッフ揃っていると話がはやい。その場であーでもない、こーでもないと議論ができるので皆納得がいくまで話せてかなりスムーズでした!

決まったら、あとは実行のみ!

各自、やるべきタスクをもくもくとこなしました。 自分は、以下担当しました。

  • 今年10月でPyladies Tokyo 5周年を迎えるのでその記念パーティの企画!!
    • 5周年なので派手にやりたいと思っています!
  • PyLadies Githubにエディタ・IDEのインストール手順を用意する
    • 一通り書き終わり、あとは@こんの さんがページのレイアウトを素敵にしてくれたので、それを適用するのみ。
  • slackにポイントシステムを導入する
    • スタッフに使えるサーバーなど確認 & 何でやるかざっくり調べた

星野リゾート

ある程度、ひと段落したあとで、ホテル内を散策。 私は星野リゾート初体験だったのですが、なにもかもが感動レベルでした!!

f:id:electricSheep:20190630152237j:plain
ロビーにある木の葉っぱをよくみるとなんと、緑(赤)べこ!

f:id:electricSheep:20190630152332j:plain
コーヒーはなんと飲み放題!最高すぎる。

f:id:electricSheep:20190630154028j:plain
千と千尋に出てきそうなトンネル(渡り廊下)をぬけると・・・。

f:id:electricSheep:20190630153415j:plain
すぐ目の前がスキー上で、素敵な草原が広がっています。机椅子などあり読書をするにも最高の場所では。

冬は世界でも屈指のパウダースノーのスキー場のようですが、夏は観光するところがあまりないということで、常にホテルのなかでアクティビティが開催されていて、楽しめるようになっています。次の日メンバーも赤べこ色ぬり体験などやっていました。 日本酒なども振舞われて、日本酒好きにはたまりません。

f:id:electricSheep:20190630154425j:plain
夜ごはんはビュフェ形式。

f:id:electricSheep:20190630154506j:plain

普段あまりたべないのに、美味しくてつい食べすぎてしまい、次の日はずっと胃薬のお世話に。。食べすぎ注意です!

夜は

温泉に入り、ゆるくお酒をのみながら、11月の合宿地をひたすら調べたり、Tシャツやステッカーのデザインを話し合ったり。

f:id:electricSheep:20190630155641j:plain
お酒たくさん

合宿地は、よいなーと思ってみるともう予約で埋まっていたり、結構探すの大変(T T).

2日目

朝も食べすぎた。

引き続き残タスクの作業を行い、お昼をたべてから宿を後にしました。 胃痛により、郡山まで @selina に車で送ってもらいながら、途中猪苗代湖に案内してもらい、観光もできて満足。 @selina いつもありがとう!

f:id:electricSheep:20190630160433j:plain
やっぱり山と水はいいねーという感想を述べたら雑すぎると、怒られるなど(笑)

お土産を買ったあと、しっかり再度福島のお酒を堪能することも忘れません。

f:id:electricSheep:20190630162629p:plain
新幹線の出発時刻までの間、地元のお店で乾杯

帰りの新幹線の中では、人狼ゲームでもりあがりながら帰途につきました。

感想など

  • 今回お世話になった星野リゾート磐梯山温泉ホテルは、東京- 郡山(新幹線)- 磐梯町(在来線1h位)- バスまでホテル(20分位)のところで、正直アクセスはちょっと遠いかな?と感じましたが、それでもまた合宿で行きたいと思うくらい快適でした。冬にもスキーで絶対にいきたい。
  • ホテルで悪かった点を考えても全く思い浮かばず、あえてあげるとしたら、机の高さがもう少し高いとよかった。くらい・・(贅沢)
  • スタッフ皆が集まってやると本当に進みが早い。何を決めるにしても、その場で議論しつくして、ぱっと決めれるのでとても有意義でした!
  • 行きたいアクテビティがあったら、それまでにタスクを終わらせること!という決まり(ゆるいですが)、も頑張れてよかった。
  • 残タスクは、一人でリモートでできるものなので、粛々とがんばります。
  • 今回、スタッフ以外で参加してくれた @こんのさん 、 @kanan もいろいろアイデア出しから、実際の作業まで本当にありがとうございました!めちゃ助かったー。
  • スタッフ合宿、遊んでしまって何も進まなかったらどうしよう、と思ってましたが結果的に進捗も良好で、楽しくできました!

星野リゾートさん、素敵な合宿体験をありがとうございました!!

PyLadies Tokyo ではイベントの企画、運営に興味があり、いっしょにPyLadies Tokyo を盛り上げてくれる仲間を募集しています!

Raspberry pi もくもく会 第13回 開催レポート&2018年の振り返り

Raspberry pi もくもく会 も、今回で13回目の開催になりました。

13回目のレポートをしつつ、2018年を振り返りたいと思います!

13回目は1/6(日)という新年早々という日程にもかかわらず、21名の方が参加してくれました。

今日やったこと

今回自分は、GoPiGo2を組み立て+OSのインストールまで行いました。

現在GoPiGo3なるものが出ていて、公式HPにはGoPiGo3の設計書しか載ってなくて、どう組み立てたらいいのだ!と最初途方にくれたのですが、YouTubeに組み立ての動画がありました!YouTubeさまさま! 組み立て作業は好きなので、めちゃ楽しかったー。あとはPython でいろいろ制御できるらしいので、ソフト側を作っていこう。

そして、今日は自分がまだ初詣にいっていないということもあり、途中ぬけだして@noricokt さんと神田明神に初詣に行くという暴挙に・・・^ ^。
完全にゆる・・ふわ・・

f:id:electricSheep:20190106223021j:plain:w500

しかし、大吉&IT情報安全祈願のお守りも手に入れ、今年はいい年になりそうな予感!

成果発表

毎回、発表したい人だけ、やった内容を発表してもらっています。

今回はこんな感じです。

f:id:electricSheep:20190106224534j:plain:w400

  • googleVoiceKit &プロジェクター&カメラを搭載をした本格的なミニオンロボット
  • google-Home-miniをrasPI-zeroでロボット化

f:id:electricSheep:20190106224616j:plain:w500

  • ラズパイ4台をつなげてクラスター作成、円周率をもとめる計算の分散処理をして検証

  • 本日、初めてしったpythonで、Lチカに成功!

  • Rasberry piの温度を取得して表示!
  • Node-Redを使ってモーターを制御
  • 3Dプリンタで自作したロボット足を制御
  • タミヤのプラモをモーターを制御して走らせる
  • 光センターでLチカ
  • Rasberry piのインストール!

などなど、他にもいろいろみなさん、新年からもくもくを楽しんだもようでした。 皆、試行錯誤して得た知見を発表してくれるので、とても参考になります。 また、継続して参加していただいている方の作品がどんどん出来上がっていく様子も楽しいです。

Raspberry piもくもく会とは、どんな雰囲気か

ここで、改めて紹介すると、Raspberry piもくもく会とは、Raspberry piやっている人&やりたい人(初心者/熟練者を問わず)で集まって楽しく勉強しましょう!という会です。

raspberry-pi-moku.connpass.com

雰囲気としては、完全にゆるふわです。

各々、集中してやるときは、集中し、疲れてきたら他の人が何やっているかみたり、聞いたり、おやつ食べたりというような感じでやっています。

毎回、常連さん:3割、2〜5回目の人:4割、初めて参加の人:3割くらいの割合です。 初めて参加される方の中には、今日Raspberry pi買ってきました!というかたも必ずいて、インストール作業からやったりしています。

Raspberry pi は、何気に最初のOSインストール、もしくはSDカードの初期不良、などの壁にぶちあたることが多く、こういった会で人に聞きながらやるのは、いいのかなーと思っています。

また、毎回おぉー!!すごい!!となるものを作っている熟練者もいます。そういった作品を間近で見るだけでも、Raspberry piの可能性を感じられるし、いい刺激を受けたりもします。

2018年を振り替えって

自分は主催者ですが、自分が楽しいからやっているというスタンスです。正直それ以外なにも考えていません^^;
参加者が気負わないように、あえてゆるふわな雰囲気でやっています。

と、いいたいところですが、本当はもともと自分があまり気が回る方ではないので、勝手にゆるふわになっています。 そして、そんな頼りない私を他の運営スタッフや参加者の方に助けられた2018年でした。

  • ケーブルや部品が足りなければ、貸したり探してくれたり、
  • 誰か困っている人がいたら、フォローしてくてたり、教えてくれたり、
  • 工具を持参してくれ、ハード面でいろいろ手助けしてくれたり、
  • FaceBookページを作ってくれたり、
  • twitterのまとめを作ってくれたり、

全て参加者の皆さんが進んでやってくれました。 そして、学んだことなどを資料にして共有してくれたり、次参加したときに他の人に教えてくれたりするので、本当にありがたい。

また一緒に運営している、恐ろしく多忙な中、毎回会場を確保して付き合ってくれている@kuboakiさん ‏、Raspberry piに詳しく頼りになる、@yuzu_afro さん、新しくスタッフに加わってくれた@knou さんに感謝!!一人ではここまで続けられなかったーー(T T)

そして、なんと!!毎回アンケートをとっているのですが、これまで全ての回をあわせて、

「また参加したい」100%

という結果でした。

2019年は、引き続き毎回集まった人たちで、わいわい情報共有をしたりしながらも、なにか一緒にできたらいいなぁと思っています。

次回は2/23(土)です。皆さまの参加お待ちしています!

Django! Django! Django!

この投稿は PyLadies Advent Calendar 2018 の9日目の記事です。

このタイトルにピンと来た方、さては村上春樹ファンですね。(一応元ネタ

ではなく、今年はまさにDjangoの年でしたね(個人的見解)。

PyLadiesもくもく会や合宿でも「今日はDjangoの勉強します!!」という方がとても多かったです。

その中でも、Django Rest Fremewark(以下DRF)を学びたい方が多く、どうやって勉強すればいいか聞かれる機会が増えましたので、超ざっくりDRFの全体像と自分が勉強した方法を紹介したいと思います。

※ ここで紹介する例は、Django REST framework Quickstartで作成したプロジェクトを元にしています。5分程度で、さくっとDRFのプロジェクトが作成できますので、ぜひお試しください。

Django REST framework(DRF)

RestfulなAPIということは、モデルと1対1で結びつくようにAPIを作っていくイメージだと思います。 1モデル内のリソースに対して一覧を問い合わせたり、モデルの各レコードに対して追加・更新・削除を行いますので、それをDRFで実現するためには、最小限下記の設定が必要です。

f:id:electricSheep:20181209132626p:plain

(1) URLConf

プロジェクト作成時に自動生成される urls.pyは 、あるURLに対してリクエストが送られた場合、レスポンスを返すビュー関数を指定するための設定を行うためのものです。

Quickstartの例では、URLConf(urls.py)にRouterを使用して設定しています。

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

## Router

  • RouterにはSimpleRouterとDefaultRouterの2つが用意されています。
  • ネストしたエンドポイントを対応可能にするpackagesもあります
  • Routerに登録できるのはViewSetのみで、APIView / GenericAPIViewでは利用できませんが、ViewSetをルータクラスに登録するだけで、APIのURLconfを自動的に生成できます。
  • ViewSet以外では、urlpatterns にURLのパターンとそれに紐付けるビュー関数を追加します。

(2)View

  • 役割としては、Webリクエストを引数にとり、 Webレスポンスを返します。
  • Viewは下記種類があります。

    • ViewSets
    • Views
      • Function view:関数ベースのビューを扱うための@api_viewデコレータを使用して定義する
      • Class based view:クラスベースのビューを扱うためのAPIViewクラスを継承して定義する
    • Genericviews
  • リクエストパースをサポートするRequestオブジェクトが提供されていて、下記により、POST, PUT, PATCH メソッド のリクエストの場合にリクエストボディを解析したものが辞書形式で取得することができます。

request.data

※なんと、この1行でファイルおよび非ファイル入力を含む、すべての解析されたコンテンツを取得することができる。parser_classesを指定すれば、勝手に解析してエラーを返してくれたりもする。

  • DRFはResponseオブジェクトも提供します。
  • ResponseはWebページ(HTML)やエラー、jsonドキュメントやPNGJPEGといった画像など、何でも返す事ができます。

(3) Serializer

  • HTTPResponseで返すために、modelのインスタンスjson などの出力可能な形式に変換するための手段を提供します。
  • また、Requestで受け取ったストリームをPythonで扱えるデータ型にパースして、オブジェクトインスタンスに復元します。(デシリアライズ
  • serializersは4つ用意されています。
    • serializers.Serializer
    • serializers.ModelSerializer
    • serializers.ListSerializer
    • serializers.HyperlinkedModelSerializer
  • ネストしたモデルの作成・更新に便利なthird-party packagesもあります  - https://github.com/beda-software/drf-writable-nested
  • バリデーションはSerializerで、決まったルールによって実行されます。コード上は簡潔にかけるのですが、内部で行われいてる実行順序などを把握していないと、???になりますので、最後に記載した参考ページを参考にするとよいと思います。ここでは詳細を省きます。

勉強法

ここまで見てわかったように、Router、View、Serliarizerごとに、いろいろな種類が存在するので最初混乱しがちです。(少なくとも自分は混乱した。。) これに加え、DRFでは例えば以下のような便利機能がたくさん提供されていて、そういった機能を把握するも大切です。

  • (例)特定のビューにアクセスできるユーザを制限するのに便利なパーミッションクラス
from rest_framework import permissions
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

viewにたったこの2行を記述するだけで、認証されたユーザーに対しては完全にアクセスできるようにし、認証されていないユーザーには読み取り専用アクセスを許可するという設定をすることができます。 最初、あまりにも少ない記述でいろいろ実現できていて、いったいそれらの処理はどこに書かれているんだ!とこれまた混乱しました。

ここではざっくりと概要だけ書きましたが、詳細に関しては、下記参考になるページ、本を列挙しましたので、そちらを参照してもらうとすっきりわかると思います。

それぞれたくさん種類がありますが、用法によって使い分けができると思いますので、まずはそれぞれで何ができるのか・できないのか、どんな機能が提供されているのかを把握するのが近道かと思います!

また、自分がやりたいことを実現できそうなものを見つけたら、先に説明したQuickstartのようなシンプルなプロジェクトを作成して、django-rest-framework の内容をもとに1つずつ動きを確かめる方法が自分はわかりやすかったです。

Let's enjoy DRF !

参考ページ

PyLadies Tokyo 合宿 in 沖縄にいってきました!

今年もPyladies Tokyoの合宿に参加してきたのでそのレポートです。

Pyladies合宿も今年で4回目になります。私は今年で3回目の参加です。 年に1回、2泊3日で行なっているこのイベント、conpassに公開すると同時にすぐうまる人気イベントです。 毎年、PyLadies初です!という方も参加してくれ、今年も何人か初参加してくれました^^

なぜ沖縄だったのか

毎年近場で行っていた合宿ですが、初代PyLadiesTokyo代表の@a_macbee ‏さんが、会社設立と共に沖縄に戻ってしまたこともあり、昨年の合宿で「来年は沖縄でやるのもいいかもねー」などと話していたのですが、本当に実現しました。 これは、@maaya8585さんの力によるところが大きい!

沖縄と遠いこともあって、流石にそんなに人が集まらないかなーと思いましたが、結果13人の人が集まり、ワイワイ楽しむことができました

決めていたこと

  • 集合時間 沖縄空港に12:30
  • 宿(Airbnbで一軒家を手配)
  • レンタカーを2台手配(+沖縄在住の @natsukoa333 ‏ の車1台)
  • 夜ごはんは1日目、2日目とチームを2つに分けて、それぞれが買い出し& 作り&後片付けを担当する
  • 3日目のチェックアウト後は観光したい人で観光

という感じで、飛行機は各自手配という感じでした。

1日目

朝10時半についたメンバーとまずは沖縄のorion ビールで乾杯!

f:id:electricSheep:20181117163108j:plain:w300

その後続々と沖縄に降り立ったメンバーも合流し、その都度ビールで乾杯。最高ですね。

宿は、13人泊まれる一軒家。外国人住宅街ということで、とても雰囲気ある素敵エリアでした。 また、海までは徒歩10歩、ダイビングスポットで有名な綺麗な海が広がっていました。

しかし、まずは皆PCを広げ始め、もくもく開始。pyladiesらしい。

夕食は、 @Yuryu ‏さん のおかげで、google スポンサーということもあり豪華!! 作ったソーキそばと、もずくスープもとても美味しかったー。正直あんなに美味しいソーキそばを食べたのは初めてです。お代わりした。

f:id:electricSheep:20181117174122j:plain:w200

夕ご飯時に、自己紹介タイム。皆、合宿ではDjangoをやる、という人が多かったです。 夜は、温泉に行く人たちもいれば、もくもくする人、お酒を飲みつつ各自自由に楽しみました。

2日目

台風が近づいている?こともあって大荒れの天気。一歩も外に出れない状況で、まさに黙々日和でした。 私は、@akiyoko さんがかいた Django本のデプロイの章をもくもく。 自分はインフラの知識があまりないので、nginx、mysqlのインストールからサーバーの設定など、丁寧に説明が書いてあってとっても勉強になりました。 本当は、本を一通りやってレビューブログを書くところまで合宿でやりたかったのですが、たどり着けず・・・。

その他、Pyladiesスタッフ業などやりました。

夕方になって奇跡的に晴れて、海に行きたい人たちで海へお散歩。 大雨が降ったあととは思えない、綺麗な海で、沖縄を堪能!CDジャケットに使えそうな写真を量産しました(笑)

f:id:electricSheep:20181117163908p:plain:w500

  • PyLadiesのSlackで #onair というチャネルがあり、イベント時にはそのチャネルで実況中継を行なっています。 写真を@kananが流したところ、@kame-chanによるこのツッコミ(笑。

散歩から帰ってくると、もくもくしていたチームは色々捗ったとのことでよかった。

皆自由に好きなことができるのが、Pyladies合宿の良いところです^ ^

夜はまた豪華! スパム入りのゴーヤチャンプル、人参しりしり海ぶどう、お肉、魚、その他恐ろしい量が並んでいました。 ちゃっちゃとつくって、皆すごいなー。

ご飯も、お酒も買いすぎ疑惑で、この量どうしたらいいんだ感あったのですが、さすが、Pyladies。 余ったお肉などを次の日の朝に焼いたりして、美味しく食べきりました。 お肉があれば、とうぜんお酒も飲みたくなるので、美味しく朝からビールをいただきました。

3日目

沖縄の北と南に観光するチームに別れて観光。 私は、以前行った美ら海水族館にもう一度行きたかったので、北チームに合流。 普通、帰る日などは、北方面への観光は断念しそうなものですが、旅慣れている人が多く、全く適当な予定だったにも関わらず、その場その場で判断して、結局観光を大満喫することができました。

f:id:electricSheep:20181117165258j:plain:w500

  • 私は、骨とか標本が好きなので、この展示にかなりテンション上がりました!

道の駅、美ら海水族館、いるかショーの鑑賞、古宇利島まで行って、飛行機のる時間のちょっと前に空港へ到着。 私は早い方の飛行機(19:15発)だったのですが、21時くらい発のメンバーが多かったので、そのあと美味しいステーキを食べに行った模様。

私は楽しかったなーと旅の余韻に浸りながら、帰りの飛行機で沖縄名物?のスパム入りおにぎりを美味しくいただきました。

f:id:electricSheep:20181117172647j:plain:w200

感想

  • 沖縄ということもあってふわふわしてしまい、もくもくはあまり捗らなかった ^^;
  • 沖縄在住の方も参加してくれ、沖縄のPythonやコミュニティ事情を知ったり、Pyladiesキャラバンも色々進んだのでよかった。
  • 参加者の方のいろんな話が聞けて楽しかった。
  • 今回、レンタカー、ご飯等、googleさん( @Yuryu ‏ )がスポンサーとして提供してくれました。本当にありがとうございます!!
  • 現在、沖縄で仕事をしている @natsukoa333 ‏が色々沖縄の文化のこと教えてくれたり、ランチの手配してくれたりでとても助かった。感謝!!
  • 皆、好き勝手やっているようで、ちゃんとやることやって楽しめて素敵。本当に今回参加してくれた皆に感謝、感謝です。

とにかく今年も楽しかったーー!!

PyLadie Tokyo は来月12/1にもくもく会をやる予定です。

pyladies-tokyo.connpass.com

皆さまの参加お待ちしていますー。