2021-01-01から1年間の記事一覧
はじめに 概要 この記事はDjango Advent Calendar 2021の19日目の記事です。 本記事ではDjangoでMySQLの全文検索機能を使う方法について紹介します。前提として、DjangoはMySQLの全文検索機能を標準ではサポートしていません。従って、いくつかのノウハウが…
概要 一般的にアプリケーションでRDBを使用する際は、 SELECT INSERT UPDATE DELETE ができればよい。これに対して、MigrationではCREATE TABLEやDROP TABLEの実行権限が必要になる。従って、両者に同じユーザーを割り当てるのはアプリケーションユーザーが…
概要 DDDに関する本を読んだり勉強会に参加したりすると「ドメインモデル貧血症」という言葉をよく目にする。ふと「ドメインモデル貧血症」という言葉が元々どこからきたのか気になったので調べてみた。 英語のWikipediaの記事 英語のWikipediaには「Anemic …
やりたいことはタイトルの通り。以下の3つの書き方があった。 ②が一番スマートだが、Enumの仕様上こういう書き方もできるんだって知っておいて損はないと思った。※ この例では都道府県コードから都道府県を引くstaticメソッドを実装している。 書き方① Enum…
概要 前回の記事に続いて、本記事では、WEBアプリ開発をする上での前提知識・スキルという意味での「言語の習得」をブレークダウンして考えてみたい。 前提 既に何らかの言語でWEBアプリケーション開発の実務経験がある人が、他の言語を習得しようとする場合…
概要 エンジニアをやっていると「新しいプログラミング言語の習得」に取り組むことがある。仕事で必要に迫られて習得しようと思うこともあるし、自分で興味をもった言語があって触ってみよう・習得してみようと思うこともあると思う。『達人プログラマ』にも…
概要 先日Scrapboxのアカウントを作成してみた。 scrapbox.ioScrapboxはGoogleアカウント連携でしかアカウントを作成できないサービス仕様になっている。従って、アカウント作成したばかりの状態だとGoogleのアカウントの個人情報が表示されてしまっている箇…
PythonでEnumを使うときの変数名の記法についてルールがあるのか気になったので調べてみた。 PEP8 PEP8には「Enumを書くときはxxxケースで書きなさい」ということは特に明記されていない。 ※ PEP8の方が、EnumがPythonに入った時期よりも、もちろん古いので…
概要 JSONを返すAPI実装するときに、以下のように共通部分でラップしたレスポンスを返すことがある。 { "header": { "code": "0", "message": "success" }, "result": { "books": [ { "id": 1, "name": "技術書1", "price": 3000 }, { "id": 2, "name": "技…
概要 ソフトウェアテストで使われるデシジョンテーブルという技法がある。gihyo.jp前からプログラムで作成できないのかな?と思っていたのだが、やってみたらPythonで意外と少ないコードで実現できた。以下で実際にデシジョンテーブルを作成しながら説明して…
Pythonでは標準モジュールのhttpにステータスコードが定数で定義されていることを最近知った。 docs.python.org今までは知らなかったので、ステータスコードで判定する処理を書くときは if response.status_code == 200: print("OK") みたいにちょっとしたコ…
概要 DjangoのUserモデルにはlast_loginというフィールドがある。Djangoに限らず、こういう系のカラムをDBに持つことはシステム上よくあるが 最後に「ログイン」という行為をした日付が入る 最後にログイン状態でアクセスした日付が入る のどちらの仕様なの…
概要 前回に引き続きRabbitMQのチュートリアルをやってみる。今回はチュートリアル1の「"Hello World!"」をやる。www.rabbitmq.com やったこと RabbitMQに接続する まずはRabbitMQに接続する。チュートリアル上のコードは以下となっているが、RabbitMQにID/P…
概要 以下の日本大学文理学部情報科学科の教授の方がクリエイティブ・コモンズで公開してくださっているチュートリアルをやっていた。zenn.dev前回まででアプリはできたので、Netlifyにデプロイしてみた。laughing-lamarr-502333.netlify.appチュートリアル…
概要 クリエイティブ・コモンズで公開されているコンテンツを変更して公開するときに、何を明記すればいいのか分からなかったので調べた。 背景 以下のReactの教材を自分でやったものをGithubとNetlifyで公開しようと思った。 zenn.dev 教材には この作品は…
概要 今までPythonでコードを書くときに例外をなんとなく雰囲気で使っていたので、ちゃんと仕様を調べてみた。 検証したこと 1. Exceptionはコンストラクタ引数をargsフィールドに保持している 以下のようなコードを例にする。 def hoge(): raise Exception(…
Googleで「requests」を検索すると最初に以下の日本語版のドキュメントが出てくる。requests-docs-ja.readthedocs.io私はこれまで、ずっとこの日本語版を参照していたが、対象としているrequestのバージョンが1.0.4とかなり古いバージョンであることに最近気…
概要 DjangoでModelのFileFieldを文字列やファイルで初期化する方法が分からなくて調べていた。※ 以下のようにModelFormを使用してファイルアップロード機能を実現する方法はいくつかヒットしたが、FileFieldを自分で初期化する方法はほとんど出てこなかった…
概要 requestsは以下のようにResponse.raise_for_status()というメソッドを使うとレスポンスのステータスコードが400系や500系だった場合に、例外を送出することができる。 bad_r = requests.get('http://httpbin.org/status/404') bad_r.raise_for_status()…
概要 Gitを使い始めるときに、最初に`git config'コマンドで以下のようにユーザー名とメールアドレスを登録する事になると思う。 $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.comgit-scm.comここで登録し…
概要 マーティン・ファウラーの『リファクタリング』が勉強になることがたくさん書いてある素晴らしい本だったので、読んだ感想や考えたことをセクション毎などの適当な粒度でメモしていきたいと思う。www.ohmsha.co.jp今回は「第6章 リファクタリングはじめ…
概要 マーティン・ファウラーの『リファクタリング』が勉強になることがたくさん書いてある素晴らしい本だったので、読んだ感想や考えたことをセクション毎などの適当な粒度でメモしていきたいと思う。www.ohmsha.co.jp今回は「第11章 APIのリファクタリング…
以下のようにpathlibを使うと、Pythonでも1行でテキストファイルの読み込み・書き込みを行うことができることを知った。 読み込み from pathlib import Path text = Path("/path/to/fizz.txt").read_text(encoding="utf-8") 書き込み from pathlib import Pa…
概要 数年ぶりにリーダブルコードを読んだ。www.amazon.co.jp前から順番にガッツリ読んだ訳ではなくて、パラパラ流し読みしつつ、引っかかったトピックを重点的に読んだ。前回読んだのは、恐らくもう5年以上前で、まだ就職する前で大学生でアルバイトでエン…
概要 Djangoでプロジェクトを作成した後に、初期ユーザーを作成する際には $ python manage.py createsuperuserを実行する。このコマンドは、デフォルトでは対話モードで実行されるので、自動化してスクリプトの中で実行したいときに面倒である。私自身も、…
少し前に、Python界にはPython Developers Surveyという年1の調査があるということを書いたが、先日、2020年版が公開されたようである。www.jetbrains.com2019年と比べると、以下がパッと目を引いた。 Fast APIが前回は名前がなかったが、今回は12%シェアが…
概要 前回に引き続き、以下の日本大学文理学部情報科学科の教授の方がクリエイティブ・コモンズで公開してくださっているチュートリアルをやっていく。zenn.devまた、適宜、以下の本を参考にさせて頂きながら進める。(以下、『りあクト!』)oukayuka.booth.p…
概要 以下のRabbitMQのチュートリアルをやってみることにした。 www.rabbitmq.comチュートリアルはいくつかの言語で公開されていて、Python版も公開されている。 背景 Python界隈ではCeleryというタスクキューのライブラリが使われているのをよく見かけるの…
概要 Pythonプロジェクトのフォーマッターにisortとblackを使う場合、両者にはフォーマットルールが異なる部分があるので、isort側でblackと競合しないように設定する必要がある。これまでは、blackの公式ドキュメントに紹介されているisortの設定をコピーし…
MySQL8系では、文字コードがデフォルトでutf8mb4に設定されていることを知った。 mysql> show variables like '%char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+----------…