このブログについて

ブログについて

ブログの目的と頭の中の地図(リンク集)について記載してあります。

目的

このブログの目的は、転職活動時の採用担当者または仕事関係者に対して

  • どのような学習をしてきたか明示する
  • どのような考え方や価値観なのか明示する

することです。

記事の種類

以下の2種類の記事がメインです。

学習に関する記事について

私の学習の方針としては、「再現性のある知識」を大事にしています。つまり、何かの課題をこなすときに、その時だけどうにかなるような調べ方やただのコピペするだけの方法よりは、調べたことは記事化して思考の整理(頭の中の地図に追加)をして、再度似たような場面があった場合に半分以下の時間で課題の解決に至ることを目標としています。「失敗は何度してもいい、けど同じ失敗はするな」ですね(自戒)。
本ブログでも、そのような記事を書ければなーと思いながら書いています!

考え方に関する記事について

自分の好きなことは「物事を法則化し、それをまとめて、後で振り返り、こんなに積み重ねたのかと自己満足に浸ること」です(笑)。そのため、コーディング時に考えることや伝わる質問の仕方などを法則化やフォーマット化して、随時アップデートしていくことに、ゲームやパズルのような楽しさを感じます。
前述の「再現性のある知識」も踏まえて、色々な場面で楽しく&使いやすい考え方のフォーマットを提供できたらなーと思っています!

リンク集

主に過去に自分が書いた記事や考えにアクセスしやすいように、記事へのハブの役割としてのリンク集です(整備中)。最終的には、自分の頭の中の地図のようにできればと思っています。

仕事系リンク

個人メイン

対人メイン

質問

集団メイン

技術系リンク

Linux

プログラミング言語

ショートカット

3分(?)でよく分かるDebianのディレクトリ構造

概要

Debianのディレクトリ構造を公式リファレンスから、ざっくりと解説します。 この記事はRuby初心者が書いており、この記事の対象は初心者向けです。

また、フィヨルドブートキャンプのメンターのShohei Umemotoさんからのアドバイスに基づいて執筆しています。Shohei Umemotoさん、ありがとうございました!

Debianとは?

Debianの概要

Linuxディストリビューション(ハードとアプリケーションの橋渡しをするLinuxカーネルとソフトウェア群をパッケージングして利用者がインストールなどしやすくしたOS)の一つ。1993年にイアン・マードックにより創設された。ちなみに、Debianという名前は作成したイアン・マードックとガールフレンド(後の妻)の名前Debra Lynnnから名付けたらしい。かっこいい。

Debianの利点

  • OSとしての安定性があり、9,000を超えるソフトウェアパッケージが用意され、ハードウェアへの対応も迅速
  • 日本語表示に対応
  • Debian(デビアン)をベースとしたディストリビューションも多数派生(Ubuntuなど)
  • 無料

Debianのディレクトリ構造

ディレクトリ構造とは?

普段はあまり気にしませんが、OSはOS開発者が意図したディレクトリ構造があります。LinuxなどのOSで主なディレクトリ構造が決まっており、FHS(Filesystem Hierarchy Standard)と呼び、非営利組織Linux Foundationが保守管理しています。

なぜディレクトリ構造を気にするべきなのか?

複数人が見るような、サーバーでは、ある程度決まった場所においた方が、どこに何が置いてあるか分かりやすくなると思います。コードやログの置き場はその意図したディレクトリ構造にしたがって置きましょう。

ディレクトリ構造詳細

原文はC.2. The Directory Treeを見てください。

Directory Content
\bin 全てのユーザーが使用する実行ファイルが入る。基本的なコマンド(cat, lsなど)が入っている。
\boot 静的ファイルと起動時にロードするもファイルが入る。
\dev デバイス機器の情報に関するファイルが入る。
\etc OSの設定に必要となるファイルやプログラムの設定ファイルなどが入る
\home 各ユーザーのデイレクトリが纏めらている(ホームディレクトリ)。
\lib 共有ライブラリとカーネル モジュールが入っている。
\media CD-ROMやフロッピーディスクなどの外付けメディア用のマウントポイント。
\mnt 一時的にマウントされるファイルシステムのマウントポイント。
\proc カーネル関連情報が保存されるディレクトリ。ディスク上に実際存在するのではなくメモリ上に存在するため、仮想ファイルシステムと呼ばれる。
\root ルートユーザーのホームディレクトリ。全階層の起点。
\run 現在実行されているプロセスに関する情報が入る。
\sbin OS が動作するための重要なコマンド(実行ファイル)が入っている。ここにあるコマンドはルートユーザーのみが実行できる。
\sys Linuxカーネルに関する情報(現在のカーネルデータの構造属性)が入っている。毎回再起動するたびに新しく作成される。
\tmp 一時ファイル。システムが起動するたびに中身は削除される。
\usr 全てのユーザーが使用できるアプリをインストールするディレクトリ。ユーザーコマンドやライブラリなどの読み取り専用のデータが置かれる。
\var e-mailやwebサイトなどの様々な可変なデータが入る。実行するタスクによってサイズが増減する。
\srv システムから提供されるサービス関係のデータが置かれる。
\opt RPMやdpkgといったパッケージ管理システムでプログラムをインストールする時に使用される。

以降では、特にサイトの配信時に関係する\varと\srvについて説明します。

\varについて

様々な一時保存ファイルやロギングデータが保管される場所。/var/log, /var/mailなどがあるため、ロギングファイルなどはこちらで管理しましょう。

参照:Chapter 5. The /var Hierarchy

\srvについて

配信するサービスにおいて、サービス利用者が利用する読み取り専用データ、書き込み可能データ、スクリプトファイルの置き場。サイトのHTMLの置き場の/srv/physics/www、バージョン管理システムの置き場/srv/compsci/cvsなどがある。

参照:3.17. /srv : Data for services provided by this system

サイトのスクリプトはどこに置くか?

例えばサイトのHTMLファイルを置くときは以下の候補が考えられます。

  • 特定のユーザーのみに関係する場合はユーザーのホームディレクトリ (ただし、nginxなどを利用する時に /var/cache/nginxがnginxユーザーのホームディレクトリになることもあるので注意)
  • データのディレクトリとファイル構造を公開しない場合は/var/lib
  • それ以外は、基本的に\srv

まとめ

DebianなどのLinuxでの開発では上記のディレクトリ構造を意識してファイルを置きましょう。ただし、これらは、あくまで推奨のため実際に配置する場合は、チームと相談したりやサービス利用者が利用しやすい配置を検討することをおすすめします。

参考文献

フィヨルドブートキャンプをするにあたっての生活リズム

概要

フィヨルドブートキャンプをするにあたっての生活リズムを一定にするために、生活リズムの目標を記録する。

詳細

タイムスケジュール

時間 やること
5:45 起床
5:45~6:05 支度、ストレッチ
6:05~8:00 目覚まし会、散歩、日報確認、タイムスケジュール作成、記事作成
8:00~9:00 朝食、洗濯干し
9:00~9:20 ルーティン(テーマ集からテーマを選び調査、言葉探し)
9:20~11:00 学習(なるべく手を動かすもの)
11:00あたり 休憩
11:00~12:30あたり 学習
30分~1時間 昼食、休憩
~15:00 カフェに移動して学習(本読みメイン)
~17:00 ジム
17:00~18:30あたり 学習
1時間 夕食、休憩
~20:30 学習
20:30~21:00 今日の日報提出、明日の日報作成、目覚まし会準備
21:00~22:00 風呂、休憩
22:00~22:30 マインドフルネス、ストレッチ
22:30 就寝

学習に関して

目標時間

午前:5時間 午後:4時間

手順

  1. 日報の目標確認
  2. タイムスケジュール調整
  3. Todoistにタスクを記載し更新(1タスクは10分以内、スタートタスクと6タスクごとに振り返りタスクを入れる)
  4. 振り返りタスク時にかかった時間を振り返る(Todoistのアクティビティログとブラウザ履歴振り返り)
  5. 一区切りついたら、日報に記録

学習時に意識すること

  • 拘ることより、最小限の労力で早く終わらせること
  • 時定数(完成の6割に達する時間)を早くするように、細かい目標設定とPDCA を回す
  • 無理しない、眠いなら仮眠・散歩・風呂、疲れを感じたらすぐ寝る!!

心に響いた言葉集

概要

名言や心に響く言葉を探すのが好きなため、探した言葉を記録したいと思います。

気分別好きな言葉

その時々で必要な言葉があるので、ここではその時の気分ごとに言葉を分けて、記録しようと思います。

落ち込んでいる時

どん底が人生をやり直す強固な基盤となった。

JKローリング(ハリーポッター著者)

エピソード:ハリーポッター作者のJKローリングは母の死や離婚をきっかけにうつ病になり、生活保護と娘の助けを受けながら、なんとかハリーポッターの1作目を書き上げた。そんな彼女のハーバード大学卒業式でのスピーチの一文(https://athinkingrice.com/english-speeches/j-k-rowling-at-harvard)。

知った時に思ったこと:ちょっと前どん底の時に、大好きなハリーポッターの作者が同じように頑張っていたことを知って生きる勇気をもらえた。

精神的なスランプからは、なかなか抜け出すことができない。

根本的な原因は、食事や睡眠のような基本的なことにあるのに、それ以外のところから原因を探してしまうからだ。

落合 博満(プロ野球監督)

  • 人物紹介:
  • エピソード:
  • 思ったこと:

1日3食しっかり食べて睡眠をとってる俺たちのほうがずっと本気だった!!

ライオス(漫画「ダンジョン飯」)

  • 人物紹介:
  • エピソード:

「睡眠をとって食事をしたら 生き物ってのはようやくやりたいことができるようになるんだ」

も名言

  • 思ったこと:

踏ん張ろうと思う時

人生における大きな喜びは、「君にはできない」と世間が言うことをやってのけることである。

ウォルター・バジョット(経済学者)

エピソード:

努力する人は希望を語り、怠ける人は不満を語る。

井上 靖(小説家)

より頑張ろうと思う時

手を動かした人だけが世界を変える

Yasuhiro Onishi

  • 人物紹介:発言は2015年はてな技術部チーフエンジニアの時のもの。現在は取締役 / 組織・基盤開発本部長 / 人事部長(元はてなCTO)。言葉は はてな技術部紹介 2015から抜粋。他にも「問いを立てる」「エンジニアの殻にこもらない」など深い言葉が多数。

  • 思ったこと: ちょうど、楽々ERDレッスンの演習をやっていて、実際に手を動かした方が100倍勉強になった。「手を動かさないと、頭はうごかない」のだと実感。

他の方から募集した好きな言葉

勝つぞ。 負けて得られるものがあるなんていう奴がいるが、そんなものはねえ。 全部言い訳だ。勝つことで俺は、前に進む。 テメエらもそうしろ(漫画「アオアシ」)

nginxで立ち上げたサイトにSSL接続する方法について、ハマったポイント

概要

Let's Encryptのcertbotの証明書を用いて、nginxにてVirtualHost + SSL対応サイトを作成するにあたり、多くのポイントでハマったので、その対応を記載する。

結論

以下のように実行すればいい

  • nginxの設定ファイルを以下のように作成

>設定ファイル

$cat /etc/nginx/sites-enabled/ドメイン
server {
    listen 80;
    listen 443 ssl; 

    server_name ドメイン;

    access_log /var/log/nginx/ドメイン/access.log;
    error_log /var/log/nginx/ドメイン/error.log;
        
    # for Let's Encrypt
        location ^~ /.well-known/ {
            root /var/www/certbot/ドメイン;
            }

    location / {
        root var/www/nginx/ドメイン/public/; #/srv以下に置く場合もある
        index index.html;
        }
    }

$ sudo certbot certonly --webroot -w /var/www/certbot/ドメイン -d ドメイン
  • 発行された証明書と秘密鍵に基づき、nginxの設定ファイルを以下のように修正

>設定ファイル

$cat /etc/nginx/sites-enabled/ドメイン
server {
    listen 80;
    listen 443 ssl; 

    server_name ドメイン;

    ssl_certificate      /etc/letsencrypt/live/ドメイン/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/ドメイン/privkey.pem;

    ssl_protocols        SSLv3 TLSv1 TLSv1.2 TLSv1.3;
    ssl_ciphers          HIGH:!aNULL:!MD5;

    ssl_prefer_server_ciphers   on;
    
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;

    access_log /var/log/nginx/ドメイン/access.log;
    error_log /var/log/nginx/ドメイン/error.log;
        
    # for Let's Encrypt
        location ^~ /.well-known/ {
            root /var/www/certbot/ドメイン;
            }

    location = /favicon.ico {
        access_log off;
        empty_gif;
        expires 30d;
        }

    location / {
        root var/www/nginx/ドメイン/public/; #/srv以下に置く場合もある
        index index.html;
        }
    }

詳細

環境

サーバのOS: Debian 11.9

openssl version: 1.1.1w

opensslの対応している暗号スイート: SSLv3, TLSv1, TLSv1.2, TLSv1.3

インストールしたLet's Encryptのcerbot: My HTTP website is running Nginx on Debian 10

目的

Nginxで作成したVirtualHostのサイトをSSL対応したい。そのため、Let's Encryptのcerbotにて証明書と秘密鍵を発行してもらい、Nginxの設定にその二つを反映。最終的にhttps://ドメインで接続時にエラーが出ないことを目指す。

注意点

証明書発行前のnginxの設定ファイルと注意点

証明書発行前に以下の記述が設定ファイルが無いとエラーが発生する。

# for Let's Encrypt
location ^~ /.well-known/ {
root /var/www/certbot/ドメイン;
}

具体的には

$ sudo certbot certonly --webroot -w /var/www/certbot/ドメイン -d ドメイン
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
  Domain: ドメイン
  Type:   unauthorized
  Detail: IPアドレス: Invalid response from http://ドメイン/.well-known/acme-challenge/X76XrlQfm_JipU1R1VBUpadovI_ENSzM2Zb_1Mf_gno: 404

Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.

Some challenges have failed.

というエラーが発生する。certbotは初めてHTTPS 証明書を発行する場合, http://ドメイン/.well-known/acme-challenge/ にアクセスすることで認証を行う。そのため、先のアドレスに接続したときに403エラー(閲覧禁止)が出ないように、404エラーを返すようにする設定が必要である。

参考:

Let’s EncryptによるSSLサーバー証明書の取得、自動更新設定(2021年3月版) | 稲葉サーバーデザイン

Let’s Encrypt で証明書を発行して運用するための nginx の設定 - ymyzk’s blog

証明書発行後のnginxの設定ファイルと注意点

二点注意点がある。

SSLv3とTLSv1では接続不可

以下の設定において、TLSv1.2 TLSv1.3を削除すると、接続に失敗する。これは現在のChromeがTLS1.1未満に対応していないからである。

ssl_protocols        SSLv3 TLSv1 TLSv1.2 TLSv1.3;
ssl_ciphers          HIGH:!aNULL:!MD5;

参考:

TLS 1.0/1.1サイトは完全にブロック ~「Google Chrome 98」安定版がリリース - 窓の杜

favicon設定が必要

以下のようなfaviconを設定しておかないと、エラーログでエラーが出てしまう。以下は、空の図形を返すようにしている。

 location = /favicon.ico {
        access_log off;
        empty_gif;
        expires 30d;
        }

参考:

Nginxで適当なfaviconを設定する #nginx - Qiita

その他の注意点

httpsサイトとして問題ないかチェック

以下のサイトで立ち上げたサイトをチェックする。

Ready to check - Nu Html Checker

ディレクトリ構成を意識する

logファイルなどは/var以下に置くなど、Linuxのディレクトリ構成を意識して配置する。

参考: Debian公式リファレンス https://www.debian.org/releases/bookworm/amd64/apcs02.en.html https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04.html#purpose18 https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05.html#purpose31

Linuxディレクトリ構造 #Linux - Qiita

Linux のディレクトリ構造 #Linux - Qiita

Terminalコマンドまとめ

パス

  • パスの永続化 ~/.zshrcなどにexport PATH=$PATH:パスを記載

ディレクトリ操作系

mkdir -p ディレクトリ/ディレクトリ: 再起的にディレクトリ作成

vim

インデント設定: Vim のカスタマイズ 〜 タブ/インデントの設定 〜 - Vim のブログ