蛇ノ目の記

技術のことも。そうでないことも。

BeautifulSoup4でコメントタグの中身を取得する方法に腹落ちするまでの話

同人音楽即売会M3の出展サークルリストから、サークル名やキーワードを抜こうとしている。何に使うかは未定だけど。

サークルリスト 2018年春 | M3 - 音系・メディアミックス同人即売会 を見てわかるように スペース, サークル名, 概要 となっている。サークルに関する情報はこれだけではなくて、ソースを見てみるとコメントとしてサークル名(カナ)やジャンルコード、キーワードが記述されている。キーワードも取りたくなってしまったのでひたすらググることになったという話。なお、BeautifulSoupに関しての説明はだいぶ省く。

<!--  アナベル    A01 女性ヴォーカル   ジョセイヴォーカル オリジナル オリジナル ポップス    ポップス    -->

コメントアウトされた情報はキーワードの数や並びが統一されていないのだけどそれは置いておく。これが実データのつらみか。

コメントタグの中身を取る方法

さて、beautifulsoup comment と検索するとトップにstackoverflowがヒットする。

stackoverflow.com

曰く、find_allメソッドのキーワード引数stringに以下のような無名関数を渡してやれば無名関数を渡してやればコメントが取れる。

lambda text: isinstance(text, Comment)

これで無事コメントタグの中身が取得できてめでたしめでたし、となるけどイマイチ腹落ちしなかったので find_allメソッドを調べた。

BeautifulSoupと無名関数については以下を参考にしたりした。

www.tomordonez.com

find_allメソッド

find_allメソッドは引数で指定した条件に一致するタグの要素を返す。

ここではpタグを取得してみよう。

from bs4 import BeautifulSoup as bs

markup = """
<body>
<h1>First Heading</h1>
<p>This is paragraph.</p>
<p>spam ham eggs</p>
<!-- This is comment -->
<!-- foo bar baz -->
</body>
"""

soup = bs(markup, 'html.parser')
paras = soup.find_all('p')
for p in paras:
    print(p)

実行結果は以下。

<p>This is paragraph.</p>
<p>spam ham eggs</p>

変数pTagオブジェクトで、get_text()メソッドでタグに囲まれた文字列を取得できる。

This is paragraph.
spam ham eggs

となる。

コメントタグの中身を取る方法: 再訪

先の例に当てはめて、コメントタグの中身を取得してみる。

from bs4 import BeautifulSoup as bs
from bs4 import Comment

markup = """
<body>
<h1>First Heading</h1>
<p>This is paragraph.</p>
<p>spam ham eggs</p>
<!-- This is comment -->
<!-- foo bar baz -->
</body>
"""

soup = bs(markup, 'html.parser')
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
for c in comments:
    print(c)
 This is comment 
 foo bar baz 

CommentはBeatifulSoup4でコメントを表すクラス。

https://github.com/waylan/beautifulsoup/blob/master/bs4/element.py#L746L749

つまりCommentオブジェクトであるということが条件になっている。

次にstring引数について調べてみる。

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-string-argument

With string you can search for strings instead of tags. As with name and the keyword arguments, you can pass in a string, a regular expression, a list, a function, or the value True.

正規表現やリスト、関数を渡すことができるとある。無名関数を渡しているのはそのためだった。

変数textがどのような値なのか気になって仕方ないので、普通の関数にして確認してみる。

from bs4 import BeautifulSoup as bs
from bs4 import Comment

def is_comment(text):
    print(text, type(text)
    return isinstance(text, Comment)

markup = """
<body>
<h1>First Heading</h1>
<p>This is paragraph.</p>
<p>spam ham eggs</p>
<!-- This is comment -->
<!-- foo bar baz -->
</body>
"""

soup = bs(markup, 'html.parser')
comments = soup.find_all(string=is_comment)
 <class 'bs4.element.NavigableString'>
 <class 'bs4.element.NavigableString'>
First Heading <class 'bs4.element.NavigableString'>
 <class 'bs4.element.NavigableString'>
This is paragraph. <class 'bs4.element.NavigableString'>
 <class 'bs4.element.NavigableString'>
spam ham eggs <class 'bs4.element.NavigableString'>
 <class 'bs4.element.NavigableString'>
This is comment <class 'bs4.element.Comment'>
 <class 'bs4.element.NavigableString'>
foo bar baz <class 'bs4.element.Comment'>
 <class 'bs4.element.NavigableString'>
 <class 'bs4.element.NavigableString'>

見づらいうえに改行も認識されてる(´・ω・`)

h1タグやpタグはNavigableString オブジェクト、コメントタグはCommentオブジェクトということがわかった。

ついでにパースしたHTMLの各行に対して処理が行われていることも実感できた。

まとめると、

  • find_allメソッドのstring引数には関数を渡すことができる

  • パースしたHTMLの各行が、タグの場合はNavigableString、コメントであればCommentオブジェクトになる

  • string関数に各行がCommentオブジェクトであることを判定する関数を渡すことで、コメントだけを取得できる

ひとまず腹落ちしたので心置きなくHTMLからコメントが取得できるようになった。

数や順番が統一されていないサークル情報をどう使うかを考えないとならないけど、それは別の話になる。

リズと青い鳥 - 感想

連休中にリズと青い鳥を3回ほど観た。

liz-bluebird.com

タイトルこそ違うが本作は「響け!ユーフォニアム」シリーズのスピンオフ。登場人物の学年が一つ上がった後の物語。主人公はみぞれと希美。

監督は山田尚子。キャラクターデザインは西屋太志、音楽は牛尾憲輔という「聲の形」を作り上げた3人。

あらすじ

Filmarks - リズと青い鳥より引用

あの子は青い鳥。広い空を自由に飛びまわることがあの子にとっての幸せ。だけど、私はひとり置いていかれるのが怖くて、あの子を鳥籠に閉じ込め、何も気づいていないふりをした。 北宇治高等学校吹奏楽部でオーボエを担当する鎧塚みぞれと、フルートを担当する傘木希美。高校三年生、二人の最後のコンクール。その自由曲に選ばれた「リズと青い鳥」にはオーボエとフルートが掛け合うソロがあった。「なんだかこの曲、わたしたちみたい」 屈託もなくそう言ってソロを嬉しそうに吹く希美と、希美と過ごす日々に幸せを感じつつも終わりが近づくことを恐れるみぞれ。「親友」のはずの二人。しかし、オーボエとフルートのソロは上手くかみ合わず、距離を感じさせるものだった。

感想

みぞれと希美の関係性

これまでの「ユーフォ」はコンクールでの演奏シーン、府大会での演奏をめぐるオーディションやあすか先輩が吹奏楽を続ける理由など画にも物語にも動きがあり、まさしく吹奏楽部を描いた物語だった。これに対して本作は、みぞれと希美の関係性を落ち着いたトーンで描く「静」の物語になっている。

みぞれにとっての希美について印象に残っているのが、パンフレットでの対談で山田尚子監督が語っている「みぞれにとって希美の一言はいつも最終回」ということ。階段に腰掛けて、校門を眺めながら希美を待つという冒頭のシーンでのみぞれから「いつも最終回」という気持ちが伝わってくる。

パンフレット p.6

山田: そうですね。冒頭で見せた二人の関係性も、天真爛漫な希美と、希美が大好きで希美しか見えていないみぞれにとって、希美の一言がどれだけいつも「最終回」なのかが伝わればいいと思います。みぞれは「次がない」と思って毎日生きているので……。

1年生の頃に突然、希美が吹奏楽部から去ったようにいつまた離れていくかわからないという不安をいつもみぞれは抱えている。みぞれの希美に対する想いは、眩しい朝の青空を背景に青い鳥の羽を空にかざす希美を見上げるという冒頭のシーンから伝わってくる。開始数分でこれだけの情報量をほとんど台詞も無く描く山田尚子監督の力量たるや……。

一方、希美はみぞれをいつも後ろにいて自分を見てくれている存在と捉えているように思う。それは二人が歩く画から伝わってくる。いつも、みぞれは自分だけを見ていてくれていると思っているからこそ、プールに一緒に連れていきたい子がいるとみぞれから告げられたとき、みぞれと梨々花のオーボエが聴こえてきたときに表情を陰らせる。プールの話をするときに、希美が表情を陰らせたと同時に誰かが希美とみぞれの前を横切って一瞬、希美の表情がわからなくなり次の瞬間には何もなかったような顔をする、という演出は本当にはっとした。エモい。

みぞれと希美は好き合っているけど、互いに方向性が異なっているから羨むところも違ってくる。みぞれは、希美が後輩たちを仲良く喋っているのを寂しそうに見ている。それに対して希美は「同じ音大を目指す」といえば同じくらい上手いように見られると思う。終盤のあるシーンで二人の好きの方向性がはっきりと描かれる。この後、みぞれは希美が好かれたいと思っていることに気付くことができるのか。ここのシーンはクライマックスだけあって3度観て、3度とも涙が出そうになった。

パンフレット p.13

山田: みぞれは多分、 全ては理解してないかもしれないけれど、希美が言って欲しかった言葉が何だったのかを少しずつ理解していくのではないかと思います。

本作は「青い鳥が自分が青い鳥であることに、リズは自分がリズであることに気付く」物語と考えている。けれどみぞれと希美は、リズと青い鳥のように離れ離れになるわけではない。気付けたことで、きっとこれからの二人は少しずつ互いの在り方を見つめていけるのだと思う。初めて、希美が歩きながらみぞれを振り返ったラストシーンのように。

キャラクターデザイン

「ユーフォ」の池田晶子から「聲の形」でキャラクターデザインを担当した西屋太志に変更になった。「ユーフォ」と比べると線が細くて頭身が少し高いデザインで、いわゆる「萌え」の感じが薄まって繊細になっている。これによって「静」の雰囲気がより高まっている。池田晶子デザインだったらこの落ち着いた空気感はまた違ったものになったと思う。 余談ではあるけども、久美子がだいぶ可愛いと思ってる。これまでの主人公とは思えないくらい出番ないけど。

まとめ

Twitterではみぞれと希美の恋のような関係性(パンフレット pp.6~7で監督が愛よりも恋と語っている)を描いた百合的な話として褒めるツイートをしていた記憶があるけど、演出、脚本、キャラクターデザイン、音楽など全てが繊細でアニメーション作品としての完成度も本当に高い。まだ劇場で観れると思うので、全力でオススメしたい。本気で劇場で何度も観たい。無限に観たい。

ゴールデンウィークふりかえり

アニメと映画

4/28, 5/1, 5/5と3度に渡って観た。これだけ観てるので後日、感想の記事を書いておきたい。とりあえずざっくりと言うと百合作品としてだけでなくアニメーションとしても完成された作品。これまでの「響け!ユーフォニアム」から一転して「静」の作品になっている。山田尚子監督は天才。まだまだ公開しているので、音を味わう意味でもぜひ劇場で。

あとは最近Netflixを契約したのでひたすら観ていた。

レストレポはアフガニスタンで激戦地となった渓谷で任務に就く米軍の部隊に密着したドキュメンタリーで、タリバンとの戦闘や現地の住民の交流、といった兵士の日常を追っている。レストレポとは戦死した兵士の名前かつ、その後に建設した前線基地の名前。随所で兵士レストレポについてのインタビューが入る。より兵士の内面を描いた2編目があるが、そちらは未視聴。

DOPEは麻薬捜査官と売人の両方に密着して取材したドキュメンタリーなのだけど、売人側は撮影のためにマスクをしているので「この状態で車乗ってたら怪しまれるのでは」と思わざるを得なかった。とはいえそういう些末なことを気にしなければ十分に面白い。

SACから数えて10年以上ファンを続けている攻殻。ARISEと新劇場版ももちろん面白いけど、やっぱりSACに戻ってくる。3話まで観たのでこれからまた最後まで観そうな気がする。

読書

ゼロから作るDeep LearningとEffective Pythonを持って帰省していたが、ずっとネトフリに齧りついていたのでEffective Pythonを数ページ読み進めるだけに留まってしまった。pyhack合宿みたいな環境じゃないと集中して読めないな…。あとは百合展で買ったアフターアワーズを読んだ。

百合展

3月開催の筈が色々あって延期になった百合展2018に行ってきた。青山は百合おじさんが歩くと浮く。

撮影可なので様々な百合漫画の原画と「やがて君になる」のアニメ化ポスターなんかを写真に収めた。

M3

4/29に行われた同人音楽即売会M3で10枚ほどCDを購入。茶太さんの曲が入った新譜が少ないこともあって量は控えめ。事前に決めたサークル以外では、ポスターにひかれて視聴してみた白衣とMonocleのPhantom Protocol 1が結構よかった。ボカロによるヒップホップといった雰囲気。

免許更新

都庁2階の更新センターで行った。前回の更新以来、運転していないのでゴールドに。金というか金メッキだ。運転するときっとメッキが剥がれる。

乗っ取られてたOriginアカウントを復帰させた話

OriginはEA社のゲーム管理・販売プラットフォーム。アカウント乗っ取りからの復帰方法のメモ。

TL;DR

  • 秘密の質問を変更するときはサポートセンター(0800-170-2170)に電話する
  • 二重認証を設定しておこうな

過去にBattleField3やらBattleField1をプレイしていたが1年半以上放置していた。

午後、何気なくメールチェックをしたらOriginに登録したメールアドレスが変更されたというメールが来ていた。身に覚えがなかったのでこちらをクリックしてメールアドレスを元に戻し、パスワードを変更してください。の文言に従ってパスワードを変更。パスワード変更後、アカウント詳細を見るとIDが変更されていた上に言語がロシア語になっていた。

Chromeの翻訳アドオンを使ってしめやかに日本語訳して、IDを直そうとするも「秘密の質問」まで変えられていた。もちろんロシア語。

origin 秘密の質問 変更 でググったところサポートセンターに電話することで変更できるらしい。ヒットしたブログにある通り0570-081800に電話するも繋がらず。あらためて検索すると、公式Twitterにサポートセンターの電話番号は0800-170-2170に変更されたとあった。EA社におかれましてはサポートセンターの電話番号のSEOを向上させていただきたいお気持ち。

サポートセンターに掛けると口頭でのメールアドレス確認の後、送信されてきたコードを伝えて秘密の質問変更手続きとなった。大体4~5分程度で全て完了。最後に二重認証を掛けておくことを勧められたので設定しておいた。

再設定された秘密の質問を使ってIDを元に戻して全て解決。

OverpyでOpenStreetMapのデータを取得して位置情報を可視化する話

4月末に近づいた頃にようやく今月初めての記事。あまりに書かなすぎた。

だいぶ前になるけど、OpenStreetMap(OSM)からガソリンスタンドの位置情報を取得してプロットしたデータアートめいた画像を見た。なにこれかっこいい。

地図ではなく全くの白紙にプロットしてるにも関わらず、欧州・北アフリカの海岸線や主要道路が見て取れる。

あまりにかっこいい画だったので日本でも似たようなことをやってみた。緯度経度をそのまま座標としてプロットしただけで日本列島とわかる姿になる。沖縄だけでなく東京都の島嶼部なんかも確認できる。

gas stations in Japan

今回のリポジトリはこちら。

github.com

OSMからデータを取得するライブラリ

openstreetmap pythonなどと検索するとosmapiがヒットする。しかしこちらはOSMにデータを書き込む用途に向いたライブラリ。

データの取得だけが目的なのであればoverpyを使うのがよい。

A Python Wrapper to access the Overpass API.

とあるようにOverpass APIPython用ラッパーだ。

Overpass API is 何

公式Wiki - Overpass APIには以下のようにある。

Overpass API(別名 OSM3S)とは読み出し専用のAPIであり、OSM地図データの中から個別に選択された部分を取り出します。Webを介したデータベースとして動作します。利用者はAPIに対してクエリを送り、クエリに対応したデータ セットを受け取ります。

クエリはOverpass QLと呼ばれ、OSMからデータを読み出すためのSQLのようなものといえる。

公式Wiki - Overpass API/言語ガイド

OSMのデータには、駅や店舗、施設などを表すノード、道路や河川、鉄道路線を表すウェイ、ノードとウェイを組み合わせたリレーションがあるようだ。

Overpass QLを書いてみる

東京都にあるガソリンスタンドを抽出するOverpass QLを書いてみる。

area["name"~"東京都"];
node(area)["amenity"="fuel"];
out;

WebベースのOSMデータマイニングツールOverpass turboでの(実行結果)http://overpass-turbo.eu/s/yb9にアクセスしてクエリを実行すると取得結果をOSM上で確認できる。

データ取得範囲は area["name"~"東京都|神奈川県"];のように|で区切ることで複数指定できる。新宿区といったより細かい範囲も指定可能。

node(area)["amenity"="fuel"]; でノードの種類を指定している。OSMではキー=値という形のタグでオブジェクトに情報を与えている。OSMのタグ情報はtaginfoが詳しい。

鉄道の駅であれば "railway"="station"、コンビニは"shop"="convenience"と指定する。ただ、コンビニの場合はコンビニエンスストア以外の小さな商店なども含まれているようなので、主要なコンビニリストを作ってノードの他のタグnameをフィルタリングしたりする必要がありそう。

overpyを使ってみる

overpyでデータを取得してシリアライズするスクリプトを書いた。

pickleではシリアライズできなかったのでpickleの拡張モジュールであるdillを使った。

日本全国を範囲指定するので、都道府県を並べたテキストファイルの中身を結合してクエリに突っ込んでいる。

overpass_plot/script at master · NaoY-2501/overpass_plot · GitHub

from datetime import datetime
import os

import dill
import overpy


def get_prefs():
    prefs = ''
    with open('pref.txt', mode='r') as f:
        for row in f.readlines():
            prefs += '{}|'.format(row.rstrip()) 
    return prefs[:-1]


def input_node_info():
    key = input('Input node key:')
    tag = input('Input tag of key:')
    return key, tag


def save_result(result, key, tag):
    now = datetime.now()
    date = '{}{}{}'.format(now.year, now.month, now.day)
    filename = 'data/{}-{}_{}.pkl'.format(date, key, tag)
    
    print('Save as {}'.format(filename))
    
    if not os.path.exists(filename):
        with open(filename, 'wb') as f:
            dill.dump(result, f)
        print('Save complete.')

        
def fetch_result(key, tag):
    api = overpy.Overpass()
    prefs = get_prefs()
    query = (
        'area["name"~"{prefs}"];\n'
        'node(area)["{key}"="{tag}"];\n'
        'out;'
    ).format(prefs=prefs, key=key, tag=tag)
    print('Fetch query...')
    result = api.query(query)
    print('Fetch complete')
    save_result(result, key, tag)


def main():
    key, tag = input_node_info()
    fetch_result(key, tag)


if __name__ == "__main__":
    main()

bokehでプロットする

可視化にはズームして、分布を細かく見たいという理由でbokehを使った。実際にやってみると重くてズームしづらいことに気づいた。bokehがGitHub上ではプレビューできないので保存した画像を貼る。

駅の分布

stations in Japan

駅をプロットするので自然と路線そのものが浮かび上がっている。

コンビニの分布

convenience stores in Japan

流石にコンビニ全国各地にありすぎだろ……。小さい商店なんかも含まれてることが想像できるので、これは見直す必要がある。

というわけでOSMラッパーライブラリOverpyの紹介と実験結果の話だった。

みんなのPython勉強会スタッフ業で長野出張してきた

startpython.connpass.com

長野で行われたみんなのPython勉強会 in 長野 #2にメンター手伝いとして参加してきた。

の4つのグループに分かれて、それぞれ開発する会。スプリントといいつつ、もくもく会に近いけどメンターがいるのでもくもく会ともちょっと違う勉強会だった。

祝日かつ寒い日に14人も集まっていただいて感謝。

Webグループのメンター手伝いにアサインされていたのでDjangoで色々作っている中学生のサポートをすることになるも、彼は自分でガンガン進めていくすごい中学生だったので横に座ってひたすらJupyter notebookを触っていた。Webグループのメンター手伝いとは一体。

彼はDjangoWebサービスを作るだけでなくDiscord botを作ったり草コインと呼ばれる価値がとても安い暗号通貨のチェックをしているらしい。デジタルネイティブ世代やばい。14年くらい前の俺はHTML書くのが精一杯だったぞ……。

他のグループの話。ビギナーとハードウェア。

人数が最も多いのはビギナーで、今日プログラミング始めましたレベルから学校で使ってますレベルなど。ビギナーも一緒に長野のPythonを盛り上げていってほしい(コミュニティスタッフ並感)。

ハードウェアのLTでは山の中に置いたデバイスとIoT用SIMを使って、AWSに観測データを送るという自然が多い長野ならではのIoTトークを聴くことができた。

東京の#stapyでも手を動かす系のイベントやったら楽しそう(メンターやるPython猛者と強いWiFiのある会場が必要そう)。

次回の#stapyは4/3(火)。どうぞよしなに。

startpython.connpass.com

みんなのPython勉強会#33に行った

startpython.connpass.com

1週間も経ってしまったけどまとめる。

大津雄一郎(リブロワークス)

プログラミング『超入門書』から見るPythonと解説テクニック

本を書く人は周りに結構いて話を聞けるけど、編集する側からの話はなかなか聞けない。

単なる入門書から、プログラムが書けることで何ができるかを体験させていく体験重視の超入門書の時代に入っているらしい。そのなかでもPython本はここ数年ブームが来ているそうな。確かに本屋の技術書コーナーに行くとPython本が目立つ(Pythonな会社・コミュニティに関わっているので著者を知っている本もちらほらある)。

以下、編集プロダクションから見たプログラミング言語の特徴。

Pythonは文法が簡単でインデントに厳しいので綺麗に書けて入門者に向く反面、GUIが作りにくいので目に見えて触れるモノづくりを体験させづらいのが弱点だとか。まあ確かに。Webアプリ作るならできるけどゲーム製作などとなると弱い。

一方、JavaScriptは簡単にゲームなどが作れる反面、仕様の変化が激しいのが弱点。JSを使っているわけではないけど変化が激しいというイメージがある(だから入門しにづらいと勝手に思っている)。

C#はUnityがあるお陰で触れるモノづくりにとても強いそう。UnityのGUI+コードの組み合わせ。社畜ちゃんとかニンジャスレイヤーのゲームでUnity製のがあったようななかったような。

一昔にプログラミング言語の定番だったCやC++は、簡単に覚えられる言語がは多いため超入門書の題材にはしにくい。そういやNewGameのねねっちはC++でゲーム作ってたな。

超入門書の定番テクニックとして、

  • 図解

  • ステップバイステップ写経

という2つがあるそう。図解は言わずもがな。

後者は一つのプログラムを少しづつ写していって、段階ごとに成果を見れるようにするというもの。小出しの説明で覚えやすいことがメリットということだけど、達成感を少しづつ積み上げることでモチベの維持もできるんじゃないかと思った。

わざと失敗例を先に見せることで、処理の必要性が伝えやすくなる。テクニックもある。これは僕が仕事でPyQの問題文・解説の追記やら修正をしていく中でも実践してみた。前もって失敗例・アンチパターンを紹介することで、ユーザに正しい書き方や使い方をスムーズに説明できると思う。

次に流行りそうな言語は?という質問が会場から飛んだけど、そういう本が書かれ始めてから編集側がわかることなので、なかなか言えないそう。Python人気はしばらく続きそうとのこと。よかった。

岩崎 圭 (@laughk, 株式会社SQUEEZE)

入門書を読み終わったらなにしよう?

Python と WebAPI の使い方から学ぶ次の一歩〜

@laughkさん。スラスラわかるPythonの著者の1人。

プロジェクターは無事動いた(身内ネタ)。

入門書を一冊一通りやった初学者は次にどうすればいいのって話。

3つの方法がある。

  1. 入門書の内容をカスタムしてみる

  2. 次のレベルの書籍

  3. 実践的なコードを書いてみる

今回の話では3. 実践的なコードを書いてみるを紹介。

とはいえ、いきなり実践的と言われても困ってしまうのが初学者の気持ち。そこで、自分がやりたいこと・日々のタスクの自動化を提案。

laughkさん自身はその日にしたPullRequestをSlackに通知するプログラムを書いた。実際に取り組むステップは以下の通り

  1. 課題を見つける

  2. 課題の解決に必要な登場人物を洗い出す(ここではGitHub API, Slack API)

  3. 登場人物のことを知る(ドキュメントを軽く読む)

  4. Pythonインタラクティブシェルを使って雑にライブラリを試す

  5. 3と4を繰り返して自分が欲しい機能の使い方を探る

  6. エディタを立ち上げて書く

なにより、とにかく書いてみるを大切にする。これが大事。ほんと。

ドキュメントってだいたい英語で最初は怯むけど、自分に必要なところはピンポイントだったりするし、なんならQuick Startとかを読むだけで解決したりする。

清原 弘貴 (DjangoCongress JP 2018 代表)

Pythonを学んだ人にWebもオススメしたい理由

ky氏。5月19日に開催される日本で初めてのDjangoカンファレンスDjangoCongress2018の代表としての登壇。

Djangoに触れる前に、Web開発そのものについての話。個人の開発で作った価値を世界中に広げることができるのがWeb。 ではどうやってPythonでWebで価値を共有するのか。そこで出てくるのがフルスタックフレームワークであるDjango。 connpassもPyQもInstagramDjangoを使っている。みんながDjangoの友達という言葉が印象深い。

Pythonといえば最近はデータサイエンスの文脈で存在感が増していて、スクレイピングでWebからデータを集めて前処理をして機械学習をしたりする。 具体的なパッケージでいえばScrapy, Pandas, Scikit-learnだ。PythonのパッケージなのだからこれらをまとめてDjangoの中で実現することで Webと機械学習の組み合わせができる。データサイエンスに強いPythonだからこそできることで、作れるモノの幅はとても広い。

最後にPythonの他のWebフレームワークにも触れた。難易度順でいえばBottle, Flask, Django, Pyramid。前の2つは軽量フレームワークなのであまり規模の大きいWeb開発には向かない (個人的にはデータ系の人がさくっとデータの可視化なんかをやるのによさそうと思っている)。こうしてみるとDjangoのバランスのよさがわかる。

質疑応答では、Django入門に適した本に関する質問があった。英語であればあるけど、日本語書籍はとても少ない。しかし近い未来に出る、かも知れないとか。気になる。

Webへの熱い気持ちが伝わってくる話だった。

ky氏の発表はとても聞きやすい。話し方に余裕がある。

自分が発表するときは早口になりがちなので参考にしたい。


勉強会後の二次会にて「みんなのPython勉強会 in 長野 #2」のメンター手伝いをすることが大決定したので、3月21日は長野に行ってくる。

startpython.connpass.com