delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

terraform importで指定するオプションは対象のサービスによって異なる

tech.layerx.co.jp 上記の記事を参考にさせて頂いて まずはAWSマネージメントコンソール上でインフラを作成する terraform importで取り込む 作成されたtfstateを参考にしつつオプションを調べる という手順でTerraformの定義を実装していた。 その際にterra…

AIでコンテキストマップを生成できないか試してみた

概要 新しいシステムに関わると、システムの概要を把握するためにモデルのコードやER図を眺めたりする。ただ、プロダクションレベルのシステムはテーブル数が多いので片っ端から読んでいてもなかなか全貌を把握するに至らない。 従って、DDDなどの文脈などで…

DjangoユーザーがRails入門してみて感じた違い

はじめに 私は仕事で3年以上Djangoを使っているが、副業でRailsを使う機会があった。同じそれぞれの言語を代表するフルスタックフレームワークだからそんなに違わないと思っていたらけっこう違ったので、感じた違いをメモしておきたい。 目次 フロントエン…

Ariadne ✖️ DjangoでスキーマファーストのGraphQL開発を体験してみた

はじめに この記事はDjango Advent Calendar 2023の17日目の記事です。 本記事ではAriadneというスキーマファーストの思想のPythonのGraphQLライブラリとDjangoを使って、スキーマファーストのGraphQL開発に入門してみた経過と感想を書きます。 ariadnegraph…

Djangoのカスタムコマンドの実装をチームで最低限統一する方法の検討

はじめに この記事はDjango Advent Calendar 2023の10日目の記事です。 Djangoでバッチ処理を作る際には、カスタムコマンドを実装することが多いと思います。 カスタムコマンドで実装されたバッチ処理において、以下のような考慮の有無が実装担当者に依存し…

初めて将棋の指導対局を受けてきた

初めて指導対局を受けてきた 以下のイベントに参加させて頂き、初めてプロ棋士の指導対局を受けてきました。 会場は三軒茶屋将棋倶楽部で、指導してくださったのは宮田利男先生です。 (今、竜王戦に挑戦されている伊藤匠七段の師匠です) connpass.com 対局開…

DjangoでMySQLの全文検索機能を使う

はじめに 概要 この記事はDjango Advent Calendar 2021の19日目の記事です。 本記事ではDjangoでMySQLの全文検索機能を使う方法について紹介します。前提として、DjangoはMySQLの全文検索機能を標準ではサポートしていません。従って、いくつかのノウハウが…

Djangoでアプリケーション用のユーザーとMigration用のユーザーを分ける

概要 一般的にアプリケーションでRDBを使用する際は、 SELECT INSERT UPDATE DELETE ができればよい。これに対して、MigrationではCREATE TABLEやDROP TABLEの実行権限が必要になる。従って、両者に同じユーザーを割り当てるのはアプリケーションユーザーが…

「ドメインモデル貧血症」という言葉の起源を調べてみた

概要 DDDに関する本を読んだり勉強会に参加したりすると「ドメインモデル貧血症」という言葉をよく目にする。ふと「ドメインモデル貧血症」という言葉が元々どこからきたのか気になったので調べてみた。 英語のWikipediaの記事 英語のWikipediaには「Anemic …

PythonでEnumをstaticメソッド内でループする

やりたいことはタイトルの通り。以下の3つの書き方があった。 ②が一番スマートだが、Enumの仕様上こういう書き方もできるんだって知っておいて損はないと思った。※ この例では都道府県コードから都道府県を引くstaticメソッドを実装している。 書き方① Enum…

「プログラミング言語の習得」をブレークダウンして考えてみる(WEBアプリ開発の場合)②

概要 前回の記事に続いて、本記事では、WEBアプリ開発をする上での前提知識・スキルという意味での「言語の習得」をブレークダウンして考えてみたい。 前提 既に何らかの言語でWEBアプリケーション開発の実務経験がある人が、他の言語を習得しようとする場合…

「プログラミング言語の習得」をブレークダウンして考えてみる(WEBアプリ開発の場合)①

概要 エンジニアをやっていると「新しいプログラミング言語の習得」に取り組むことがある。仕事で必要に迫られて習得しようと思うこともあるし、自分で興味をもった言語があって触ってみよう・習得してみようと思うこともあると思う。『達人プログラマ』にも…

ScrapboxにGoogleのアカウント情報が出ないようにするためにやったこと

概要 先日Scrapboxのアカウントを作成してみた。 scrapbox.ioScrapboxはGoogleアカウント連携でしかアカウントを作成できないサービス仕様になっている。従って、アカウント作成したばかりの状態だとGoogleのアカウントの個人情報が表示されてしまっている箇…

PythonでEnumを使うときの変数名の記法について

PythonでEnumを使うときの変数名の記法についてルールがあるのか気になったので調べてみた。 PEP8 PEP8には「Enumを書くときはxxxケースで書きなさい」ということは特に明記されていない。 ※ PEP8の方が、EnumがPythonに入った時期よりも、もちろん古いので…

JSONを返すAPIの共通部分(=エンベロープ)について

概要 JSONを返すAPI実装するときに、以下のように共通部分でラップしたレスポンスを返すことがある。 { "header": { "code": "0", "message": "success" }, "result": { "books": [ { "id": 1, "name": "技術書1", "price": 3000 }, { "id": 2, "name": "技…

Pythonでデシジョンテーブルを作成してみた

概要 ソフトウェアテストで使われるデシジョンテーブルという技法がある。gihyo.jp前からプログラムで作成できないのかな?と思っていたのだが、やってみたらPythonで意外と少ないコードで実現できた。以下で実際にデシジョンテーブルを作成しながら説明して…

PythonでHTTPステータスコードを表現するときにhttpモジュールに定義されている定数を使う

Pythonでは標準モジュールのhttpにステータスコードが定数で定義されていることを最近知った。 docs.python.org今までは知らなかったので、ステータスコードで判定する処理を書くときは if response.status_code == 200: print("OK") みたいにちょっとしたコ…

DjangoのUserモデルのlast_loginについて

概要 DjangoのUserモデルにはlast_loginというフィールドがある。Djangoに限らず、こういう系のカラムをDBに持つことはシステム上よくあるが 最後に「ログイン」という行為をした日付が入る 最後にログイン状態でアクセスした日付が入る のどちらの仕様なの…

RabbitMQのチュートリアルをやってみる(その2)

概要 前回に引き続きRabbitMQのチュートリアルをやってみる。今回はチュートリアル1の「"Hello World!"」をやる。www.rabbitmq.com やったこと RabbitMQに接続する まずはRabbitMQに接続する。チュートリアル上のコードは以下となっているが、RabbitMQにID/P…

【Reactの勉強】アプリをNetlifyにデプロイする

概要 以下の日本大学文理学部情報科学科の教授の方がクリエイティブ・コモンズで公開してくださっているチュートリアルをやっていた。zenn.dev前回まででアプリはできたので、Netlifyにデプロイしてみた。laughing-lamarr-502333.netlify.appチュートリアル…

クリエイティブ・コモンズで公開されているコンテンツを使うときの表記方法

概要 クリエイティブ・コモンズで公開されているコンテンツを変更して公開するときに、何を明記すればいいのか分からなかったので調べた。 背景 以下のReactの教材を自分でやったものをGithubとNetlifyで公開しようと思った。 zenn.dev 教材には この作品は…

Pythonの例外の仕様についてちゃんと調べた

概要 今までPythonでコードを書くときに例外をなんとなく雰囲気で使っていたので、ちゃんと仕様を調べてみた。 検証したこと 1. Exceptionはコンストラクタ引数をargsフィールドに保持している 以下のようなコードを例にする。 def hoge(): raise Exception(…

requestsの公式ドキュメントは英語版を参照すること

Googleで「requests」を検索すると最初に以下の日本語版のドキュメントが出てくる。requests-docs-ja.readthedocs.io私はこれまで、ずっとこの日本語版を参照していたが、対象としているrequestのバージョンが1.0.4とかなり古いバージョンであることに最近気…

DjangoでModelのFileFieldを文字列やファイルから初期化する方法

概要 DjangoでModelのFileFieldを文字列やファイルで初期化する方法が分からなくて調べていた。※ 以下のようにModelFormを使用してファイルアップロード機能を実現する方法はいくつかヒットしたが、FileFieldを自分で初期化する方法はほとんど出てこなかった…

requestsが送出した例外からレスポンスボディを取得する

概要 requestsは以下のようにResponse.raise_for_status()というメソッドを使うとレスポンスのステータスコードが400系や500系だった場合に、例外を送出することができる。 bad_r = requests.get('http://httpbin.org/status/404') bad_r.raise_for_status()…

Git/GitHubのメールアドレス周りについて調べた

Git

概要 Gitを使い始めるときに、最初に`git config'コマンドで以下のようにユーザー名とメールアドレスを登録する事になると思う。 $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.comgit-scm.comここで登録し…

『リファクタリング』読書メモ (フェーズの分離 [Splite Phase])

概要 マーティン・ファウラーの『リファクタリング』が勉強になることがたくさん書いてある素晴らしい本だったので、読んだ感想や考えたことをセクション毎などの適当な粒度でメモしていきたいと思う。www.ohmsha.co.jp今回は「第6章 リファクタリングはじめ…

『リファクタリング』読書メモ (問い合わせと更新の分離 [Separate Query from Modifier])

概要 マーティン・ファウラーの『リファクタリング』が勉強になることがたくさん書いてある素晴らしい本だったので、読んだ感想や考えたことをセクション毎などの適当な粒度でメモしていきたいと思う。www.ohmsha.co.jp今回は「第11章 APIのリファクタリング…

Pythonでテキストファイルの読み込み・書き込みを1行で行う(pathlibを使う方法)

以下のように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年以上前で、まだ就職する前で大学生でアルバイトでエン…