東大柔道部ブログ

このブログは東京大学運動会柔道部の活動の記録です

2023年9月 の 投稿

Flask + Flask-SQLAlchemy + さくらレンタルサーバーでnoteと連携させたブログを作った方法

投稿者: 末広多聞  投稿日: 2023年9月17日 04:00


導入

お久しぶりです。4年の末広です。

引退したはずなのですが、今こうしてこの記事を書いています。
題名からもかなり趣向がいつもと違うことがわかるかと思いますが、今回は技術系の記事です。
というのも、ここ数週間ずっとwebサイトを作っていまして、色々と調べて、技術的なことで躓いたり成長したりしたので、ここにまとめておこうと思います。
運動会系の部活のブログの記事がテック系になることは珍しいと思いますが、これを機に今まで全く東大柔道部に関わりがなかった人も他のブログを見ていただけると嬉しいです。

完成品

投稿 - 東大柔道部ブログ このブログは東京大学運動会柔道部の活動の記録です。 akamonjudoblog.com

ことの経緯

昔々、東大柔道部にはWordpressで作成されたブログが2008年ごろからあり、それを運営していました。しかしながら、全くもってメンテナンスされておらず、しまいにはwebの知識がほとんどないものをブログ係に据えるなど、杜撰の極みでした。(もちろんバックアップなど取っているはずがない。)
そんなある日、Wordpressの謎のプラグインの内部のプログラムで使われていたPerlのバージョンがレンタルサーバーでサポートされなくなったのをきっかけにブログが閲覧できない状態になり、しかもその後なぜか2008年ごろからのデータが闇に消えていったのです。ついでに東大柔道部の某サイトも500エラーを吐いて見れない状態になりました。
これが2022年3月のお話で、とりあえず一時的な措置としてnoteで仮にブログを復活させたのですが、この時既に私はブログの復活を企んでいたのです。

(この時彼は自分は何もやっていないのに「完全復活はあまり期待できないかもしれません。」などと言っており、失礼な人間であることが伺える。 https://note.com/todaijudobu/n/n7faa7293d083 )

復活のためにまずは、過去のブログの投稿を抽出する必要があったのですが、これがかなり難航し、結局 web archive をスクレイピングすることで(ほとんど)全ての記事を取り出しました。
また、どのフレームワークでブログを作るかもかなり大事な選択で、僕は普段pythonを使うことが多いことから、Flask か Django にしようとは決めていたのですが、この2択を決断するまでに僕は引退していました。

このようにあまりにもブログ復活の進捗が遅かったので、note にかなりの数の投稿をみんなが上げていて、新しいブログもnoteとの連携を取る方がいいのではと思うようになりました。
ただ、noteは、例えばタグの機能がなかったり、誰がその記事を書いたのかの情報を付与できなかったり、あとノイズ(広告や他のユーザーのおすすめ記事)が多いのなど欠点が多いので(私はnoteのエディタも嫌いであるが、他の柔道部員的には使いやすいらしい)、新しいブログは過去の先人たちによる未来に遺すべき投稿の数々を復活させ、さらに最近の記事についてはnoteと連携し、タグや投稿者の情報を付与することでnoteの良さを最大限活かした運用することに決定したのです。

Flask + Flask-SQLAlchemy でブログ風のサイトを作る方法

webサイトを作るとなると、とりあえず、ローカルで開発を進めていきます。

Step 0 - Flaskの練習

今回はFlaskを用いるのが初めてだったので、ステップ0としては、まず簡単な掲示板の作成を行いました。

参考にしたサイト

Step 1 - FlaskのチュートリアルのFlask-SQLAlchemy化

次に練習として、Flask のドキュメントにあるチュートリアル: https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/tutorial/index.html (データベースの操作はsqlite3でSQLを書いて行っている) をFlask-SQLAlchemy を用いたデータベース管理に書き換えをしました。
(Flask-SQLAlchemy とは、Object Relational Mapper (ORM)で、SQLを書かずにデータベースの操作をできるほか、pythonのオブジェクトとしてデータベースを扱えるようになります。)

参考にしたサイト

Step 2 - 設計通りにサイトを作っていく

ここからが本番で、まず、サイトを設計していきます。ここでいう設計は、

などを考えます。そのため設計段階で組み入れたい機能全てを列挙し、それをどのように実装するのかを一旦決めます。

加えて、どの順番で何の実装していくかもこのタイミングで考え、僕の場合は、各実装を行うためのgitのブランチ名もその時に全て決めました。

今回は作りべきもののベース(Flask + Flask-SQLAlchemy になっているblog)がStep 1 でできているので、それに修正や機能追加をすることで作りました。

参考にしたサイト

note API を利用してnoteの記事のリンクから本文などの抽出するコード

#Python
from datetime import datetime
import requests


def get_note_article_from_url(url_string):
    error = None

    try:
        url_string.index("https://note.com/todaijudobu/n/")
    except ValueError:
        error = "正しいURL(https://note.com/todaijudobu/n/n...)を入力してください。"    

    if error is not None:
        return {}, error
    else:
        article_key = url_string[31:]

        if len(article_key) < 13:
            error = "正しいURL(https://note.com/todaijudobu/n/n...)を入力してください。"
            return {}, error

        api_url = "https://note.com/api/v3/notes/"

        response = requests.get(api_url+article_key)

        note_api_status_code = response.status_code

        if note_api_status_code // 100 >= 4: # Client Error or Server Error
            error = "note の API が使えなくなっている場合があります。ブログの管理者に相談してください。"
            return {}, error

        response_dict = response.json()

        try:
            created_at = datetime.strptime(response_dict['data']['created_at'], "%Y-%m-%dT%H:%M:%S.000+09:00")
        except ValueError:
            error = "note の API が仕様が変更され使えなくなっている場合があります。ブログの管理者に相談してください。"
            return {}, error

        note_article_data = {
            'key': response_dict['data']['key'],
            'title': response_dict['data']['name'],
            'body': response_dict['data']['body'],
            'created_at': created_at,
            'permanent_link': url_string,
        }

        return note_article_data, error

さくらレンタルサーバーにデプロイ

Step 3 - デプロイ

ここまでローカルで開発してきたが、それが完成したら、本番サーバにデプロイする必要があります。
サーバはVPSと悩んだが、ケチってこっちにしました。VPSとの差で非常に大きいのは、sudoが使えないことです。

Flask的にはWSGIを使えってうるさいが、レンタルサーバではほぼ全てで使えないので、index.cgiで

#python
wsgiref.handlers.CGIHandler().run(app)

を用います。

加えて、ProxyFixの設定では、以下でコメントアウトした部分の設定を行ってしまうと動作しなくなるので注意が必要。

# python
class ProxyFix(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SERVER_NAME'] = (サーバー名)
        environ['SERVER_PORT'] = "80"
        # environ['REQUEST_METHOD'] = "GET"
        environ['SCRIPT_NAME'] = ""
        # environ['PATH_INFO'] = "/"
        # environ['QUERY_STRING'] = ""
        environ['SERVER_PROTOCOL'] = "HTTP/1.1"
        return self.app(environ, start_response)

参考にしたサイト


まとめ

ブログ完成した。大変だった。
pythonってすごい。javascriptってもっとすごい。


(noteっていうプラットフォームを1から作った人なら尊敬できるけど、noteに登録しただけで尊敬してもらえるって思ってんの、やっぱコイツどうかしてるぜ。
 https://note.com/todaijudobu/n/n387b8842d85e )

以上、無給でサイトを作った末広でした。




女子合同練習会

投稿者: 河本理倫子  投稿日: 2023年9月4日 08:57

8/26、27に、東京で女子合同練習会を行いました。東北大、東大、京大、九大の他、東京都内の大学、七大のOGの方にも多く参加していただきました。ご参加いただき、ありがとうございました。とても充実した練習会になりました。

今回は、女子全員でブログを書くことになり、豪華なブログになること間違いなし!それでは、お楽しみください。

一年の乾です。
今回は、リレー形式でブログを書くため、書く内容と量を抑え、後に続く人の話題まで取らないようにします。

では、私は、ちょっとした驚きについて話したいと思います。七大学の柔道部についてです。
東大は、同期も先輩方もOBの方も異彩を放つ人が多く、いい意味で変わった人たちの集まりだと思っています。東大柔道部ほど、おもしろいところはないんじゃないか、と思っていました。
しかし、他の七大学も、負けず劣らず、いい意味で変わった人が多い、とわかりました。女子に関して言えば、言うこと全てがなぜか面白くなる北大のOGの方、思いもよらないことを突然言う東北大の部員、山手線に乗り続けて午後練まで寝ようと試みる京大の部員の方、レセプションで他大学の上級生になぜか水をかけてしまった九大のOGの方、などなど。また、東北と九州には、tenマック(マクドのバーガーを10個食べる、らしい)を誕生日やクリスマスに行うという風習があることにも、驚異の思いを隠せませんでした。
七大学の柔道部の異様さに驚くとともに、そのおかしさに安心しました。

バトンを渡されました、2年の広羽です。
トップバッターとして七大柔道部員は大抵変だという話を書いてくれた乾ですが、そんな彼女も柔道部に染まってきています。というかよく考えれば最初から変でした。彼女の自己紹介は彼女についてというより、彼女の兄についてでした。(https://note.com/todaijudobu/n/n52a4ca86ba43
このブログですが、実は兄のことを書いているように見せかけて、本当は自分のことを書いていた疑惑が最近あります。というのも、彼女の兄と彼女はそっくりらしいです。

私は七大で唯一の同期である京大のyさんについて書こうと思います。彼女は怪我をして試合に出られないのにもかかわらず、こだまに乗って4時間弱もかけ、東京に来てくれました。ですがホテルを取るという概念がなかったようで、カラオケで寝ようとしたものの隣の部屋からの騒音で寝れず、結果山手線に乗ろうという発想になったらしいです。彼女も変ですね。yさんは京大柔道部の中で唯一の女子部員かつ初心者スタートということで、かなり辛い時間を過ごしたと思うのですが、あと2年同じ競技を続けられることを願います。

3番目に書くことになった、3年の河本です。なんか携帯のメモに書いてたらここだけ太文字になって直し方もわからないので諦めます。
まずはじめに、直前のご連絡だったにも関わらず参加していただいた防衛大学、東京経済大学、上智大学、東京都市大学、日本医科大学のみなさんありがとうございました。
また、前例のない企画にも関わらず快くご尽力いただいた指導陣の皆様、ありがとうございます。

本文に入ります。乾は私がいうのもなんですが兄にそっくりです。私が中高5年間見ていた「乾秀成」(兄)は実は妹だったと言われても違和感ないほどです。現在部員の乾とは寮で一緒に住んでたんですが、高校までは温厚な関係が続いたにも関わらず、気づいたら舎弟関係みたいになっててびっくりですよね。はい。

以下、女子練習会のブログです。
結構(ユーモアの塊な)人も集まり、大盛況だった女子練習会ではありますが1番目の乾がいい感じに全部かいつまんで話したので書くことねぇなぁと思ってます。
まぁとりあえず、いつみても飛名さんは可愛かったし、強かったです。インスタのストーリーで見た、一人暮らしの家にある懸垂バーも、女子練習会のために意気込んで2日前に参加した柔術のスパーで肩が外れたにも関わらず来てくださったことも、全てひっくるめて好きです。とても。とても。大好きです。

他に書くことがない+一つ前の広羽が同期について書いていたので、私も七大の同期について書こうかなと思います。まず、同期は3人います。初めから3人でしたが、途中で2人になり、2ヶ月前の七大を機に3人に増えました。で、まず1人目は、たびたび私のブログにも上がる九大のI川です。彼女は北海道まで旅行に行く際に、福岡から北海道までバイクで行くような女です。しかし親には逆らえない(?)らしく、バイクに乗っていることがバレたら怒られるそうで、やつにも怖いものはあるんだなと思いました。猪。
2人目も九大なんですが、M田です。彼女は普通の子です。なのになぜI川と噛み合うのか不思議です。
そして最後は問題児ギックラー、東北大のSS木です。齢20にして、ぎっくり腰になった女です。
正直彼女とは2ヶ月前の七大戦で初めて会い、それ以来会ったことはないのですが5年くらい知り合いなんじゃないかと錯覚させられるほど彼女はコミュニケーション能力が高いです。今回の七大で起こったI川とのいざこざ?の際も仲裁に入ってくれ、1番初めになぜか泣いていました。今回は実習で練習には来れなかった訳ですが、いたような記憶があります。参加したい気持ちが強すぎて怨念となって現れたのでしょう。とりあえず、なんか変なやつです。
最後に2年のN哉を心から尊敬する、東北大のO田がN哉の疑惑のつむじ写真(H羽が見せた)を見た際に放った一言で締めたいと思います。
「私はそんなの信じたくないです。」
私からは以上です。

4番目に書くことになりました、みんなのアイドル高橋です!嘘です。東大柔道部マネージャーの高橋です。

まず最初に私は女子合同練習に参加した方々に謝罪すべきことがあります。
日々の寝不足による体調不良で私、高橋は2日目の合同練習に参加することが出来ませんでした。他校のマネージャーさん、参加してくださった選手の皆さん、ご迷惑をお掛けしました。以後体調管理は気をつけます。

上記のように私は1日目の試合についてしか記載することが出来ませんが試合や乱取りを見た個人的な感想を書きたいと思います。

マネージャーとして入部した当初、ルールなど全くわかっていなかった私ですが最近基礎的なルールは分かるようになってきました。七大ルールと国際ルールも区別が着くようになりました!進歩ですね。うん。
女子の試合はあまり見る機会がなく、どんな感じなのだろうと思って見に行ったところ、凄まじかったです。もしかしたら男子の試合より気迫があるかもしれないほど凄かったです。もうほんと語彙力の崩壊ですよ。
確かに男子の試合は音や迫力があるのですが女子の場合あまり体型の違いがないからこそ互角にやり合う先輩や同期、他校の皆さんがかっこよく見えました。
マネージャーとしてタイマーや試合の撮影を任せていただいたのですが至らないところもありましたが参加させて頂きとても楽しかったです。
次回は両日とも参加できるように体調を万全にして挑みたいです。
私からは以上です。

どうも、今書いているのはメリッサです。

では、ちょっと自分の感想を書きたいと思います。今回は立ちも寝技も、とにかく試合を沢山こなしていったんです。それが結果的に少しだけでも成長できたきっかけになりました(と信じたいです)。

さて、ここでちょっとした黒歴史をお話ししたいと思います。練習会の後の約一週間、毎晩布団に入ると、猪川先生に足払いで見事に倒されたシーンや効果的な技が出せずに何度も指導されたことが脳裏に浮かんできて、恥ずかしさと悲しみでなかなか眠れませんでした。目を覚ますと、天井にも巨大な「足払い」と「指導」の文字が刻まれているように見えて逃れることができませんでした。

しかし、一点明らかにしたいことがあります。猪川さんの立ち技は驚くほど素晴らしく、めっちゃかっこいいです。そして、試合が終わった後、猪川さんはとても優しく私に指導をしてくださいました。そのお心遣いには本当に感謝しています。他のOGの先輩たちは全員が全員、才能に溢れ、個性的な方々です。阪大の鈴木さんの力強さには驚かされました。京大の中吉さんは、私の言う「バタフライ」が何かをご存知ではないようでした(どうやら各大学で呼び名が違うようです)が、とても優しく私に京大流のやり方を教えてくださいました。北大のひなさんは、天使のような性格と顔立ちをお持ちでいらっしゃる一方で、実力も超一流です。そして、個性的でとても面白いみちこさんと藤井さんもいらっしゃいます。彼女たちはまるで人生のカラーパレットを増やしてくださるような存在です。

七大の女子現役では、非常に個性的なyさんについては前の人が書いていたので、東北大のo田さんについて話したいと思います。この合同練習を通じて、私たちの関係はさらに深まりました(なんと膝枕までしてくれるほどです)o田さんは仙台出身の非常に活発で明るく、可愛らしい女の子です(ちなみに私の同期は彼女の先輩ですが、雰囲気というか感じは全く違うのがちょっと不思議と感じします)o田さんの強さは私に尊敬の念と同時に少しのプレッシャーを感じさせます…今後、もっと頑張らなければならないと強く思います、うんん

ちなみに、練習会の時、後輩が私の家に泊まりに来ました。だから最後には、彼女がいつも美味しいと褒めている私の手作りの🍤🍅春雨の写真で締めくくりたいと思います。

🍤🍅春雨

では





東京学生体重別選手権

投稿者: 西村虎太朗  投稿日: 2023年9月5日 13:30

皆さん、お久しぶりです。一年の西村虎太朗です。この度は僕が先輩方から日頃の行いによる信頼を承り、ありがたいことに体重別のnoteを書かせていただくことになりました。嘘です。皆様申し訳ございません。体重別当日、僕は日本武道館集合のところ講道館に1人集合してしまい、大遅刻をしてしまいました。その償いとしてこのブログを書かせていただいております。特に僕が到着するまで外で待ってくださった齊木さんには本当に迷惑をかけてしまいました。申し訳ございません。改めてお詫び申し上げます。

さて、本題の東京学生体重別選手権に関してですが、皆様本当に健闘していたと思います。相手のレベルが高くすぐに投げられてしまったかもしれませんが、それでも「強い人と当たって柔道をする」という経験が出来ただけでも素晴らしいことだと思います。少々人数が多いので一人一人のことを書くのは少し憚られますが、今大会で東京学生体重別選手権に出るのが最後である前主将、岡本さんには少し触れさせていただきたいと思います。まずは岡本さん、本当にお疲れ様でした。試合内容としては、惜しくも引き込みの指導などを喰らってしまい反則負けとなってしまいましたが、それでも先輩の勇姿、しかと見届けました。本当にかっこよかったです。先輩は柔道に対しても筋トレに対しても本当に真面目に真剣に取り組んでいて本当にすごいことだと思います。僕には到底敵いません。先輩は現役引退したあとも、ちょくちょく練習に顔を出してくださって本当にありがたいです。先輩が顔を出していただいている時に先輩の技術などを吸収できるように僕も頑張ります。

今年は僕は怪我による欠場で出られなかったのですが、来年は同期,先輩方と一緒に出られるように体調管理などを徹底しようと思います。

そして今回もOBの方々が試合を見てきてくださりました。その中で、OBの竹之内様からカンパをいただきました。本当にありがとうございます。今後ともご支援のほどよろしくお願いいたします。

ちなみにこのブログを書いている日、私西村はまたもや遅刻をしてしまいました。しかし今日は少し事情が違い、ただの遅刻ではないのです。僕がフレンチブルドッグを飼っており、毎晩同じベッドで寝ていることを念頭に置いて、以下今朝起きた悲劇をご覧ください。

~朝~
目覚まし「ピピピピピピ!ピピピピピピ!」
ワイ  「スヤァ…」
目覚まし「ピピピピピピ!ピピピピピピ!💢」
ワイ  「ハッ!!やべぇやべぇ遅刻してないよ な?あ、7:30やよかったぁ〜余裕で間に合うわ」
イッヌ 「ハッハッハックンクンクンクン」
ワイ  「よしよしよし〜😍今日も可愛いなぁ〜 早くリビング行こうねぇ」

ピチョッ……

ワイ  「⁈⁉︎⁉︎⁉︎」
ワイ  「クッッセ!!こ、、、これは?、、、 俺の…?……それとも……」
イッヌ 「☺️☺️☺️☺️☺️😁😁」 
ワイ  「匂い的に……お前やな…うん…お前や」
————————————————————————

そう、僕の犬がシーツに粗相をしてしまったのです。先輩方からはお前のやろ!と言われましたがおそらく僕ではないと思います。そう願っております。ということでシーツを急遽洗わなくてはいけない状況になってしまいその時間ロスのせいで15分前後遅刻してしまいました。申し訳ございません。この度は遅刻理由が面白いとのことで先輩の寛大な心により許されましたが、以後粗相どころか実まで出してしまうという最悪の状況を避けるためにも僕の犬としっかりと話し合い、交渉してまいりますので何卒よろしくお願いします。

いぇい!

最後は、試合後の晩飯で松永のスマホで自撮りをする堂下先輩で〆ようと思います。

最後までご覧いただきありがとうございました。