レポート

データサイエンスの実践に必要な4つの柱とは? ―「PyCon Malaysia 2019」レポート

この記事を読むのに必要な時間:およそ 6 分

私の発表 ―「Automate the Boring Stuff with Slackbot」

1日目の午前中にさっそく私の発表です。発表の準備をしていたので,オープニングとキーノートはあまり聞けませんでした。

基本的な発表内容はフィリピンで開催されたPyCon APAC,PyCon Thailandのものと同じです。しかし,トークの導入部分,Slackのメッセージ例やまとめなど,ちょこちょこ地域ごとに手を入れています。

発表の様子

発表の様子

今回は,発表の最初に「写真を撮ってTweetは大歓迎」と伝えたり,全スライドに自分のTwitter idを入れるという工夫をしました(PyCon ThailandでKatieさんが行っていたものをリスペクトしました)⁠その甲斐あってか,Twitterにもいろいろとリアクションがもらえてうれしかったです。

2日目のキーノートスピーカーでもあるCarol氏が最前列で聞いていて,最初は少しプレッシャーを感じましたが,私の発表をうなずいて聞いていてくれているので,楽しく発表できました。あとで確認すると,Carolさんも私の発表をTweetしてくれていました。とてもありがたいです。

質疑応答では「Botをどこで動かすのか?」という質問があり「EC2やHerokuなどのサーバー上で動かすのがおすすめ。開発時は自分のPCで動かすだけで試せるので簡単だよ」という回答をしました。他の参加者から「サーバーを使わずにAWS Lambdaとかを使ってBotを作るのもありだよ」というフォローがありました。⁠このSlackbotのフレームワークはLambdaでは動かすのは面倒だと思うけど,一般論としてはそういうのもありだと思う」という説明をして,なんとか今回も質疑応答をやり終えました。

ランチ

ランチはビュッフェスタイルです。基本的においしいものが多くていいですね。

ランチはビュッフェスタイル

ランチはビュッフェスタイル

ランチの料理はマレー,中華,インドの料理が混ざっている感じでしょうか。デザートにスイカやメロンなどの果物があって,それもおいしかったです。

米,玉子,チキンカレー,野菜炒めなど

米,玉子,チキンカレー,野菜炒めなど

テーブルで隣に座った女性が日本語が少しできる方で,最近大阪と東京の旅行に行っていたそうです。旅行中はすき家にばっかり行っていたそうです。とはいえ,彼女はイスラム教なので牛丼は食べられません。もっぱら魚のメニューを食べていたそうです。

Django with GraphQL ―Manuel Riel

Manuel Riel氏

Manuel Riel氏

この発表はPython製のWebフレームワークであるDjangoにGraphQLを加えていく手法や,具体的にGraphQLの内容について説明がありました。最初にREST APIの課題について説明がありました。

REST APIはゆるい標準化がされており,複数のモデル間の関係を表すことが難しいという課題があげられていました。また,Over Fetchingという必要もないフィールドの情報を全て取ってきてしまったり,逆にUnder Fetchingといって必要な情報を取得するために何回もREST APIを呼び出さないといけないことも課題であると説明していました。

それに対してGraphQLでは必要な情報を問い合わせるための,検索用の言語(QL:Query Language)を提供しています。GraphQLでリクエストを投げれば,必要な情報が1回でまとめて返ってくるということで便利そうです。

次にGraphQLの基本的な以下のコンセプトとその文法が紹介されていました。

  • Types:データベースのモデルを反映するもの。String,Intなどの型が指定できる
  • Queries:デフォルトの操作。指定したデータを取得する
  • Mutations:データを変更する
  • Arguments:クエリの再利用とデータの受け渡し
  • Nesting:ネストした属性が要求できる
  • Subscriptions:Subscribeしたデータの更新をリアルタイムに受け取る
  • Fragments:複数のクエリで同じフィールドを使うときに使い回せる

次にVue.jsとDjangoを使用したデモを行いました。Django側の実装はGraphene-Pythonというパッケージを利用しています。そして以下のようなコードを書くことでGraphQLで検索できるようになるそうです。

class Query(graphene.ObjectType):
    all_persons = graphene.List(PersonType)

    def resolve_all_persons(self, info):
        return Person.objects.all()

ただこれだけだと誰でもどんなデータにでもアクセスできてしまうので,認証などの仕組みが必要になるとのことでした(確かに)⁠

DjangoにGrapheneを導入すると確かに簡単にGraphQLには対応できそうです。実際に使ってみないとどういう苦労があるかはわかりませんが,試してみるのもありかなと思いました。

著者プロフィール

鈴木たかのり(すずきたかのり)

一般社団法人PyCon JP,副代表理事,株式会社ビープラウド所属。

部内のサイトを作るためにZope/Ploneと出会い,その後必要にかられてPythonを使い始める。PyCon JPでは2011年1月のPyCon mini JPからスタッフとして活動し,2014年-2016年のPyCon JP座長。他の主な活動は,Pythonボルダリング部(#kabepy)部長,Python mini Hack-a-thon(#pyhack)主催など。

共著書に『Pythonによるあたらしいデータ分析の教科書(2018 翔泳社刊)』『Pythonプロフェッショナルプログラミング 第3版(2018 秀和システム刊)』『Pythonエンジニア ファーストブック(2017 技術評論社刊)』『いちばんやさしいPythonの教本(2017 インプレス刊)』などがある。

最近の楽しみはPython Boot Campの講師で訪れた土地で,現地のクラフトビールを飲むこと。2019年は世界各国のPyConでの発表に挑戦している。趣味は吹奏楽とボルダリングとレゴとペンシルパズル。

Facebook:takanory.net

Twitter:@takanory

Github:takanory

バックナンバー

2019年

  • データサイエンスの実践に必要な4つの柱とは? ―「PyCon Malaysia 2019」レポート

バックナンバー一覧