よしたく blog

ほぼ週刊で記事を書いています

【Django】アプリケーションをディレクトリにまとめた時の設定変更箇所

Django でアプリを複数作っていくとルートディレクトリが見づらくなっていく。

.
├── accounts
├── manage.py
├── posts

そこで、app ディレクトリを作成し、その中にアプリを入れる形をとってみた。

.
├── app
    ├── accounts
    ├── posts
├── manage.py

それに伴い、いくつか設定を変えなければいけない部分があったので、メモしておく

アプリケーションの設定変更

今回は posts を例に出して進めていく。

まずはapp/posts/apps.pyを変更する。

ルートディレクトリに作成した時は、次のようになる。 name がアプリケーション名になっている。

from django.apps import AppConfig

class PostsConfig(AppConfig):
    name = "posts"

app ディレクトリ配下に作成した時は、次のようになる。 name がルートディレクトリに作成したときと変わっている。 app は posts から見た親ディレクトリを指していて、ドットで階層を表している。 つまり、name の部分に親のディレクトリも記述するようになる。

from django.apps import AppConfig

class PostsConfig(AppConfig):
    name = "app.posts"

アプリケーション側の設定は以上になる。 アプリケーションが変わったことにより、それを読み込む settings.py も変更が必要になる。

settings.py の設定変更

作成直後にアプリケーションを読み込む設定は何も書かれていないけど、ルートディレクトリに作成した時は、次のように設定することが多い。

INSTALLED_APPS = [
    """
    (中略)
    """

    "posts.apps.PostsConfig",
]

app ディレクトリ配下に作成した時は、settings.py の INSTALLED_APPS が次のようになる。 ここでもapp.を付けて、親フォルダとディレクトリを示すドットを付ける。

INSTALLED_APPS = [
    """
    (中略)
    """

    "app.posts.apps.PostsConfig",
]

今年やってよかったこと「サウナ」

この記事は「今年やってよかったこと Advent Calendar 2020」の参加記事です。 2020 年やってよかったことはサウナです。

サウナに出会ったきっかけ

そもそもサウナに出会ったきっかけです。 自粛やら在宅勤務やら、世間がまだまだ手探りだった頃、自分も自宅での勤務スタイルを探していました。 音楽を流してみたり、ラジオを流してみたり、映像を流しっぱなしにすることもありました。 映像系を探すときは、BGM の代わりとしたかったので流しっぱなしにしていても気を張らなくて良さそうなものを選んでいました。

その中で出会ったのが「サ道」でした。

www.tv-tokyo.co.jp

サ道

簡単にサ道の紹介を…。

原田泰造三宅弘城磯村勇斗、 そして宅麻伸。 芸能界きってのサウナ好き俳優が集結! サウナ好きによる サウナ好きのための 『サ道』いよいよドラマ化! 今回、本作を映像化するにあたって目指したのは“サウナ好きによるサウナ好きのためのドラマ”(中略)キャストもスタッフも自他ともに認めるサウナ好きが集結しました。

www.tv-tokyo.co.jp

この記事を書くためにホームページから引用しましたが、ここまでサウナ好きが集まって作られていたとは…。 すごいですね。

元々は漫画です

morning.kodansha.co.jp

ただ単にいろんなサウナ行って入ってそれを見ているだけなのですが、ドハマリしてしまいました。 自分は元々銭湯が好きだったので、サウナに対する抵抗もありませんでした。 むしろ、行きたい気持ちばかりが高まり、BGM 代わりとしての目的を他所に、夜ふかししながらサ道をイッキ見してました。 その後は、サウナ好きの友人に連れられ、いろんなサウナへ行くことになります。

サウナのなにが良かったか

サウナ好き全員がいいますが「ととのう」体験が最高でした。 暑いサウナに入って、水風呂で身体を締める。その後の「ととのい椅子」での休憩で、血が全身を駆けめぐります。 このパターンを 3 回ほど繰り返しますが、最後には疲れが吹っ飛んでます。

飲食スペースが有るところでは、その後のビールも最高ですし、就寝するときには泥のようになって爆睡できます。 翌朝にはスッキリして身体が軽いです!

行ったサウナ

ハマってしまったサウナ。 自分が今年行った場所をまとめておきます。 どこも良かったです!

北欧 / 上野駅

sauna-ikitai.com

境南浴場 / 武蔵境駅

sauna-ikitai.com

アサヒトレンド 21 / 三鷹駅

sauna-ikitai.com

かるまる 池袋 / 池袋駅

sauna-ikitai.com

サウナ&スパ カプセルホテル 大東洋 / 大阪・梅田

sauna-ikitai.com

サウナ&カプセルホテル ルーマプラザ / 京都・祇園四条駅

sauna-ikitai.com

サウナしきじ / 静岡・静岡駅

sauna-ikitai.com

スパリゾートプレジデント / 御徒町駅

sauna-ikitai.com

近所のサウナを探そう!

「サウナイキタイ」というサイトでサウナを探すこともできます。 どんどん行って欲しい!

sauna-ikitai.com

まとめ

サウナは全然怖いところではないので行ってほしいです。 行ってみたいけど不安な人は声かけてください! ととのいに行きましょう!

yoshitaku-jp.hatenablog.com

Azure Data Factoryで複数のExcelファイルを結合しCSVにする

今回はAzure Data Factoryを使って、複数のExcelファイルを結合して1つのCSVにする方法について記述する。

前提条件

Azure Data Lake Storage Gen2に「excel2csv」という名称のコンテナを作成する。 また、「excel2csv」コンテナの配下に「input」「output」という名称のフォルダを作成する。 「input」フォルダに結合したいExcelファイルを複数配置する。 「output」フォルダは結合されたCSVファイルが出力される場所になる。

f:id:yoshitaku_jp:20201208175458p:plain

「input」フォルダの中に、「excel1.xlsx」「excel2.xlsx」が存在している。

f:id:yoshitaku_jp:20201208175516p:plain 「excel1.xlsx」は次のようになっている。

f:id:yoshitaku_jp:20201208175545p:plain

「excel2.xlsx」は次のようになっている。

f:id:yoshitaku_jp:20201208175607p:plain

Linked Service作成

1 Azure Data Factoryにログインする。

2 工具箱マークの「manage」をクリックする。「Linked services」に移動し、「+ New」をクリックする。

f:id:yoshitaku_jp:20201208175632p:plain

3 「New linked service」から「Azure Data Lake Storage Gen2」を選択し、「Continue」をクリックする。

f:id:yoshitaku_jp:20201208175656p:plain

4 「excel2csv」コンテナを作成した、Azure Data Lake Storage Gen2との接続情報を設定する。完了したら「Create」をクリックする。

f:id:yoshitaku_jp:20201208175718p:plain

実装方法

1 鉛筆マークをクリックし、実際の処理を書いていく。まずはパイプラインを作成する f:id:yoshitaku_jp:20201208175737p:plain

2 「Activities」からData Flowを選択し、真ん中の空白部分へドラッグアンドドロップする

f:id:yoshitaku_jp:20201208175753p:plain

3 「Adding data flow」が表示される。ラジオボタンで「Create new data flow」を選択し、「Data flow」を選択、その後「OK」をクリックする。 f:id:yoshitaku_jp:20201208175809p:plain

Source設定

1 鉛筆マークのAuthorを選択すると、Data flowsが表示される。次に真ん中の「Add Source」をクリックする。

f:id:yoshitaku_jp:20201208175829p:plain

2 下部の「Source settings」の中から「Dataset」の「+ New」をクリックする。

f:id:yoshitaku_jp:20201208175850p:plain

3 「New dataset」にて「Azure Data Lake Storage Gen2」を選択し、「Continue」をクリックする。「Select format」にて、「Excel」を選択し、「Continue」をクリックする。 f:id:yoshitaku_jp:20201208175909p:plain

f:id:yoshitaku_jp:20201208175924p:plain 4 「Set properties」にて、「File path」を設定する。フォルダマークをクリックし、Excelファイルが配置されているフォルダを設定する。今回の場合は「input」フォルダを設定する。

f:id:yoshitaku_jp:20201208175940p:plain

Sink設定

1 「source1」の右下にある「+」ボタンをクリックし、「Sink」を選択する。 f:id:yoshitaku_jp:20201208175954p:plain

2 下部の「Source settings」の中から「Dataset」の「+ New」をクリックする。

f:id:yoshitaku_jp:20201208180011p:plain

3 「New dataset」にて「Azure Data Lake Storage Gen2」を選択し、「Continue」をクリックする。「Select format」にて、「CSV」を選択し、「Continue」をクリックする。

f:id:yoshitaku_jp:20201208180027p:plain

f:id:yoshitaku_jp:20201208180042p:plain

4 「Set properties」にて、「File path」を設定する。フォルダマークをクリックし、Excelファイルが配置されているフォルダを設定する。今回の場合は「input」フォルダを設定する。

f:id:yoshitaku_jp:20201208180100p:plain

5 下部を「Optimize」に切り替え、「Partition option」を「Single partition」に変更する。 f:id:yoshitaku_jp:20201208180114p:plain

6 「Trigger now」で実行する。

出力内容を確認する

1 コンテナ内の「output」フォルダに「part-merged.csv」ファイルが存在することを確認する。 f:id:yoshitaku_jp:20201208180128p:plain

2 ダウンロードし、中身を確認する。無事に結合されている。 f:id:yoshitaku_jp:20201208180141p:plain

身近なところから効率化 / iPhoneのショートカットを有効活用する

iPhone のショートカットはとても便利だけど、なかなか知られていないので自分が使っているショートカットを公開してみる。

iPhone のショートカット

そもそも iPhone のショートカットを知らない人のために補足しておく。 ショートカット機能は iOS12 より実装されたもので、よく使うような操作をまとめておけるものだ。 これを使うことで数タップしていた動作が 1 タップにまとめられたりして効率化になる。

f:id:yoshitaku_jp:20201204223157p:plain

ネットで調べると様々なアイデアが出てきて見ているだけでも面白い。 自分は実装していないが、「会社から離れたら」→「家族に『今から帰ります』とメッセージを送る」ようなこともできる。

省電力モードのオンオフで、ネットワークと光度を切り替える

省電力モードをオンにする場面が、バッテリーを節約したいときだったり、早く充電したいときが多いはずだ。 なので、余計な設定を切ることによって電力効率を良くしようという考えから設定した。

省電力モードをオンにする

まずは「省電力モードをオン」にしたとき、「機内モードをオフ」「画面の明るさを 0」にすることを設定している。

これは、左下の省電力モードを押す前の画面になる。 Wi-FiBluetooth がオンで、画面の明るさも半分近く保っている。

f:id:yoshitaku_jp:20201204223213p:plain

これがボタンを押すと機内モードになり、Wi-FiBluetooth はオフになった。 画面の明るさも-になっている。 スクリーンショット画像は明るいが実際の画面はほぼ真っ暗である。

f:id:yoshitaku_jp:20201204223227p:plain

省電力モードをオフにする

つぎに省電力モードをオフにしたときの設定になる。 これは逆の設定をしてあげれば良いので、「省電力モードをオフ」にしたとき、「機内モードをオフ」「画面の明るさを 50」にすることを設定している。

f:id:yoshitaku_jp:20201204223240p:plain

出発/帰宅でネットワークを切り替える

冒頭でも紹介したが、場所によってショートカットを動作させることもできる。 現在は在宅勤務のため、家にいるときはモバイルネットワークを切り、Wi-Fi を使うことにしている。 出かける時にネットワークを切り替えることを忘れてしまうため、家から離れた時にネットワークを切り替えるショートカットを設定している。

場所の情報はある程度の距離から離れないといけないため、家を出てすぐには動作しないが、2 分ほど歩いたぐらいで動作してくれる。

f:id:yoshitaku_jp:20201204223253p:plain

git rebaseでコミットを分割する

git rebase でコミットの分割ができる。

今回は題材としてスターウォーズを取り上げて実践してみる。 想定のケースは「いくつかコミットをしたが、シーズンごとにファイルをまとめてコミットしてしまった箇所があり、その部分を分割する」というものにする。

準備

まずはファイルを作成する。

mkdir star-wars
cd star-wars
touch star-wars1.txt
touch star-wars2.txt
touch star-wars3.txt
touch star-wars4.txt
touch star-wars5.txt
touch star-wars6.txt
touch star-wars7.txt
touch star-wars8.txt
touch star-wars9.txt

次に git でコミットしていく。 ep4,ep5,ep6 だけseason1 ep4,ep5,ep6というコミットメッセージになっている。

git init
git add star-wars1.txt
git commit -m 'ep1'
git add star-wars2.txt
git commit -m 'ep2'
git add star-wars3.txt
git commit -m 'ep3'
git add star-wars4.txt star-wars5.txt star-wars6.txt
git commit -m 'season1
ep4,ep5,ep6'
git add star-wars7.txt
git commit -m 'ep7'
git add star-wars8.txt
git commit -m 'ep8'
git add star-wars9.txt
git commit -m 'ep9'

コミットの粒度が合っていないので分割する。

現状の確認

現在の状態を確認しておく。

f:id:yoshitaku_jp:20201204214015p:plain

git rebaseでコミットを分割する

git rebase -i HEAD~6を実行するとエディタの画面に切り替わる。 今回は 6 個前までのコミットを表示している。

f:id:yoshitaku_jp:20201204214025p:plain

今回の場合は、ep4,ep5,ep6 を分割したい。 「season1 ep4,ep5,ep6」のpickeditに変更する。 終わったら保存する。

f:id:yoshitaku_jp:20201204214038p:plain

エディタ画面が終わって、普通の画面に戻ってくる。

f:id:yoshitaku_jp:20201204214050p:plain

もう一度、現在の状態を確認しておく。 すると、HEAD の位置が「season1 ep4,ep5,ep6」のコミットメッセージに移っている。

f:id:yoshitaku_jp:20201204214102p:plain

git statusをおこなっても何もファイルがない。

f:id:yoshitaku_jp:20201204214111p:plain

git reset HEAD~を実行し、1 つ前のコミットをステージングに戻す。

もう一度git statusを実行すると、「season1 ep4,ep5,ep6」のコミットがステージングに戻っているのがわかる。 f:id:yoshitaku_jp:20201204214121p:plain

これで、エピソードごとにコミットが可能になる。

git commit -m 'ep4'
git add star-wars5.txt
git commit -m 'ep5'
git add star-wars6.txt
git commit -m 'ep6'

git rebase --continueをおこない、編集状態から抜ける。

f:id:yoshitaku_jp:20201204214133p:plain

git logをすると無事に分割されていることがわかる。

f:id:yoshitaku_jp:20201204214141p:plain

yoshitaku-jp.hatenablog.com

git rebaseでコミットをまとめる

git rebase で過去のコミットをまとめることができる。

今回は題材としてスターウォーズを取り上げて実践してみる。 想定のケースは「各エピソードごとのファイルを作成しコミットしたが、やっぱりシーズンごとにファイルをまとめてコミットしたい」というものにする。

準備

まずはファイルを作成する。

mkdir star-wars
cd star-wars
touch star-wars1.txt
touch star-wars2.txt
touch star-wars3.txt
touch star-wars4.txt
touch star-wars5.txt
touch star-wars6.txt

次に git でコミットしていく。

git init
git add star-wars1.txt
git commit -m 'ep1'
git add star-wars2.txt
git commit -m 'ep2'
git add star-wars3.txt
git commit -m 'ep3'
git add star-wars4.txt
git commit -m 'ep4'
git add star-wars5.txt
git commit -m 'ep5'
git add star-wars6.txt
git commit -m 'ep6'

ここまではエピソードごとにファイルをコミットしてきた。 しかし、コミットの粒度が細かすぎると感じたため、シーズンごとまとめることにした。

git rebaseでコミットをまとめる

git rebase -i HEAD~5を実行するとエディタの画面に切り替わる。 今回は 5 個前までのコミットを表示している。

f:id:yoshitaku_jp:20201204212147p:plain

今回は「ep4,ep5,ep6」をシーズン 1 としてまとめたい。 ep4 へまとめる形にするので、「ep5,ep6」のpicksに変更する。 終わったら保存する。

f:id:yoshitaku_jp:20201204212206p:plain

保存が終了すると、まとめたコミットのコミットメッセージをどうするか聞かれる。 このままでよければ変更をせずに保存する。

f:id:yoshitaku_jp:20201204212222p:plain

ちなみに、変更をせずそのまま保存したときは git log すると次のようになる。 「ep4,ep5,ep6」のコミットメッセージがそのまま結合されている。

f:id:yoshitaku_jp:20201204212234p:plain

まとめるコミットメッセージを変更したい場合

まとめたコミットのコミットメッセージを変更したい場合は、ep4 部分に加筆修正し、ep5,ep6 の部分は削除する。今回は次のメッセージでコミットしてみた。

season1
ep4,ep5,ep6

f:id:yoshitaku_jp:20201204212247p:plain

git logすると、コメントが変更されていることがわかる。

f:id:yoshitaku_jp:20201204212301p:plain

yoshitaku-jp.hatenablog.com

blackをVS codeで使うための手順

Python に限らず、プログラミングで開発する際には様々な便利ツールを導入する。 今回は Python の フォーマッタ である black を VS Code に導入する方法をメモしておく。

black を有効にする

VS Code では autopep8 がデフォルトで有効になっている。 black も設定としては持っているので、変更する。 GUI で設定をおこなうと settings.json にも反映される。

f:id:yoshitaku_jp:20201126214814p:plain

f:id:yoshitaku_jp:20201126215015p:plain

保存時のフォーマット実行 を有効にする

手動でフォーマットを実行するのはめんどくさいので、ファイルを保存したタイミングで実行するようにしたい。 こちらも VS Code の設定画面から有効にできる。 settings.json に追記されていることも確認できる。

f:id:yoshitaku_jp:20201126215036p:plain

f:id:yoshitaku_jp:20201126215101p:plain

貼り付け時のフォーマット実行 を有効にする

貼り付けたタイミングでも実行するようにしたい。 こちらも VS Code の設定画面から有効にできる。 settings.json に追記されていることも確認できる。

f:id:yoshitaku_jp:20201126215136p:plain

f:id:yoshitaku_jp:20201126215202p:plain

black をインストールする

VS Code から black がないことを警告されるのでインストールする。

f:id:yoshitaku_jp:20201126215246p:plain

確認

VS Code で black が有効になっている。

f:id:yoshitaku_jp:20201126215314p:plain

f:id:yoshitaku_jp:20201126215329p:plain

ブログ環境 2020

今年の締めくくりとして今の執筆環境とこれまで移ってきたツールについてアウトプットしておく。

細々と技術ブログを書き続けてきた中で様々なツールに手を出してきた。 例えば、Inkdropだったり、Google Keepだったり、Notion と言ったツールになる。 もちろん、投稿先であるはてなブログや note にそのまま書くこともあった。

これらのツールを選んだ理由としては、2 つある。 一番重視したのはどのデバイスからでも編集できることであり、次に重視したのは自動で保存してくれることだった。 しかし、在宅勤務だったり、家から出る機会が減ったことによって重視する部分に変化が生じてきた。 今重視している部分は、はてなブログへの投稿のしやすさになり、それを実現するためのツールは VS Code となっている。

Notion を断念した

VS Code に寄せる直前は Notion に書いていて、これは自分の情報のすべてを Notion 上で管理したい思いから、ブログも寄せようとしていた。 現状簡単なメモ系はすべて Notion になっている。 しかし Notion は、Markdown で書けるのはよかったものの、段落ごとで文章が独立してしまい投稿する直前で「全選択 → コピー → 貼り付け」ができなかった。 これは自分の使い方が悪かったようなので訂正。

f:id:yoshitaku_jp:20201201182055p:plain
全選択ができない…

VS Code の環境を整えた

今は VS Code 上で書いている。 クラウド上に保存してすべてのデバイスから編集はできなくなったが、いまのところ不便は感じていない。 むしろ、iPadiPhone を文章を書くツールから分離できて今のところ良かった。

現在のフォルダ構成

現在はキャプチャのようなフォルダ構成をとっている。

  • .imagesフォルダは後で解説する。
  • .vscodeフォルダはsettings.jsonが入っていて、このフォルダ配下で実行したい設定を書いている。
  • YYYY/MMフォルダははてなブログの投稿の「月別アーカイブ」がYYYY/MMで管理されているので寄せた。
  • draftフォルダは書きかけのものを管理している。
  • templateフォルダは技術ブログだったり、書評向けだったりのテンプレートを管理している。

f:id:yoshitaku_jp:20201201182125p:plain

textlint を使って校正

textlint を使って校正している。 まだ自分なりの設定は組み込めていないので、少しずつカスタマイズしていきたい。 このブログを書いている目的が、このタイミングでの自分の考えとか思いを反映させたメモであると同時に、「誰か同じことを書いてくれないかな」という期待も含めてあるので書いてくれると嬉しい。

Paste Image を使ってキャプチャ画像をテキストに貼り付ける

拡張機能である「Paste Image」を使って撮ったキャプチャを VS Code に貼り付けて管理している。 各 PC でスクリーンキャプチャを撮った後はクリップボードに内容を持っているが、そのまま VS Code のテキスト部分に貼り付けることはできない。 しかし Past Image を導入すると Mac の場合、「Cmd+Alt+V」で VS Code に貼り付けることが出来る。

下に Past Image のキャプチャを貼り付けた。

f:id:yoshitaku_jp:20201201182139p:plain
これは画像です

marketplace.visualstudio.com

貼り付けた直後のテキスト上だと、次のようになっている。 ../.images/ブログ環境2020/2020-12-01-18-06-32.pngという形でファイルが作成されたことになる。

f:id:yoshitaku_jp:20201201182222p:plain
これも画像です

先程、紹介を飛ばした.imagesフォルダの下は次のようになっている。

f:id:yoshitaku_jp:20201201182310p:plain

Paste Images の設定

保存する形もsettings.jsonで設定でき、自分はデフォルトから下記のように変更した。

{
    "editor.formatOnSave": true,
    "pasteImage.path": "${projectRoot}/.images/${currentFileNameWithoutExt}/",
}

困っていること

現状困っていることは、はてなブログへ投稿する時に画像を 1 回 1 回アップロードし、文章の間に画像を挟み込まなければいけないことである。 Paste Images で VS Code 上では画像の管理がすごく楽になったが、はてなブログにアップロードするときの面倒さは取り除けていない。 VS Code にする以前から存在していた問題ではあるのだが、解決策には巡り会えていない。

はてなブログに投稿するプラグインも見つけたが、自分の問題は解決できなさそうで踏み切れない…。

marketplace.visualstudio.com

まとめ

今年の締めくくりとして今の執筆環境をアウトプットしておいた。 3 ヶ月後、半年後、来年のタイミングで見返した時にどう変化しているか楽しみだ。

flake8をVS codeで使うための手順

Python に限らず、プログラミングで開発する際には様々な便利ツールを導入する。 今回は Python の linter である flake8 を VS Code に導入する方法をメモしておく。

Pylint を無効にする

VS Code では Pylint がデフォルトで有効になっている。 これをまずは無効にする。 GUI で設定をおこなうと settings.json にも反映される。

f:id:yoshitaku_jp:20201125213847p:plain

f:id:yoshitaku_jp:20201125213911p:plain

flake8 を有効にする

デフォルトで入っていた pylint を無効にしたので、次は flake8 を有効にする。 こちらも VS Code の設定画面から有効にできる。 settings.json に追記されていることも確認できる。

f:id:yoshitaku_jp:20201125213941p:plain

f:id:yoshitaku_jp:20201125214005p:plain

flake8 をインストールする

まだ flake8 をインストールしていないので、VS Code から flake8 をインストールするように促される。 今回は install ボタンをクリックしてインストールをおこなう。

f:id:yoshitaku_jp:20201125214030p:plain

確認

VS Code で flake8 を有効になっている。

f:id:yoshitaku_jp:20201125214047p:plain

write-blog-every-week Advent Calendar 2020 を作成しました

今年もやります。

Write-Blog-Every-Weekコミュニティのアドベントカレンダーです
現在所属されている方も、卒業された方も、外から見ている方もお待ちしています
サイト: https://write-blog-every-week.netlify.app

adventar.org

このコミュニティもいつの間にか3年目ですね。 毎年アドベントカレンダーを作ってはTwitterに流していましたが、ストック的な場所にも残しておこうと思ってブログにしておきます。

登録ボタンを押すのはタダですし、投稿するのもタダなので、ぜひよろしくおねがいします。けど、タダほど怖いものはないので計画的に執筆をよろしくおねがいします。

ネタがない人は「イレギュラーな年になったので、今後のキャリア的なことを深く考えた話」系の記事を自分が読みたいので、よろしくおねがいします。

過去のアドベントカレンダー

adventar.org

adventar.org

余談

この記事は今年の投稿数としてカウントしないものとします。