# d.oppara.tv
> 備呆録
--------------------------------------------------------------------------------
title: "openssl で SAN を確認"
date: "2026-03-10"
--------------------------------------------------------------------------------
## はじめに
手元の証明書ファイルから Subject Alternative Name (SAN) を確認するための備呆録。
## やり方
```shell
openssl x509 -noout -text -in /path/to/cert.pem | grep -A1 "Subject Alternative Name"
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 26.3
BuildVersion: 25D125
% openssl version
OpenSSL 3.6.1 27 Jan 2026 (Library: OpenSSL 3.6.1 27 Jan 2026)
```
--------------------------------------------------------------------------------
title: "AWS CLI でセキュリティグループのインバウンドルールを追加する"
date: "2026-02-18"
--------------------------------------------------------------------------------
## はじめに
AWS CLI で SG のインバウンドルールを追加することがあったので備呆録。
量が多かったのでシェルスクリプト化。
## 手順
以下実行。
```bash
#!/usr/bin/env bash
set -CEeuo pipefail
SG_ID="sg-xxxxxxxxxxxxxxxxx"
PORT=443
DESC="hogehoge"
declare -A CIDRS
CIDRS["127.0.0.1/32"]="${DESC}"
# CIDRS["127.0.0.1/32"]="${DESC}"
for CIDR in "${!CIDRS[@]}"; do
aws ec2 authorize-security-group-ingress \
--group-id "$SG_ID" \
--ip-permissions "[
{
\"IpProtocol\": \"tcp\",
\"FromPort\": $PORT,
\"ToPort\": $PORT,
\"IpRanges\": [
{
\"CidrIp\": \"$CIDR\",
\"Description\": \"${CIDRS[$CIDR]}\"
}
]
}
]"
done
```
## 参考サイト
- [authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)
## 環境
```console
$ aws --version
aws-cli/2.33.23 Python/3.13.11 Linux/6.1.159-182.297.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
```
--------------------------------------------------------------------------------
title: "コンテナの一覧を表示するコマンドを見やすくする"
date: "2026-02-08"
--------------------------------------------------------------------------------
## 問題
`docker ps -a` の実行結果が見づらい。
## 解決
以下、利用して、自分用のサブコマンドを作成する。
[Dockerでカスタムsubcommandをあれする - 茅の下](https://ryooooooga.hateblo.jp/entry/2021/05/13/210743)
```shell
docker() {
if [ "$#" -eq 0 ] || ! command -v "docker-$1" > /dev/null; then
command docker "$@"
elif (( ${+aliases[docker-$1]} )); then
eval "${aliases[docker-$1]} ${(q)@:2}"
else
"docker-$1" "${@:2}"
fi
}
```
## 手順
以下、エイリアスを設定する。
```shell
alias docker-psa="docker ps -a --format \"table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}\""
```
## 比較
```console
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f8b515ac1f3 jwilder/nginx-proxy "/app/docker-entrypo…" 13 days ago Up 36 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp nginx-proxy
fe52095f8dfd axllent/mailpit:v1.21.5 "/mailpit" 13 days ago Up 36 minutes (healthy) 0.0.0.0:1025->1025/tcp, [::]:1025->1025/tcp, 0.0.0.0:8025->8025/tcp, [::]:8025->8025/tcp, 1110/tcp, 0.0.0.0:1080->8025/tcp, [::]:1080->8025/tcp mailpit
c886759a486c plantuml/plantuml-server "/entrypoint.sh" 5 weeks ago Exited (137) 40 minutes ago
```
```console
% docker psa
CONTAINER ID IMAGE NAMES STATUS PORTS
0f8b515ac1f3 jwilder/nginx-proxy nginx-proxy Up 36 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp
fe52095f8dfd axllent/mailpit:v1.21.5 mailpit Up 36 minutes (healthy) 0.0.0.0:1025->1025/tcp, [::]:1025->1025/tcp, 0.0.0.0:8025->8025/tcp, [::]:8025->8025/tcp, 1110/tcp, 0.0.0.0:1080->8025/tcp, [::]:1080->8025/tcp
c886759a486c plantuml/plantuml-server plantuml-local-server Exited (137) 40 minutes ago
```
## 環境
```console
% docker --version
Docker version 28.4.0, build d8eb465
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "colima を使ってみる"
date: "2026-02-07"
--------------------------------------------------------------------------------
## はじめに
[Colima](https://github.com/abiosoft/colima) を使ってみたので備呆録。
## インストール
```console
brew install colima
```
## Docker のコンテキストを確認
```console
docker context ls
```
colima が選択されていない場合以下のコマンドで切り替える。
```console
docker context use colima
```
実行結果
```console
% docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
colima * colima unix:///Users/oppara/.colima/default/docker.sock
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock
```
## 使い方
起動
```console
colima start
```
状態確認
```console
colima status
```
停止
```console
colima stop
```
動作確認
```console
docker run --rm hello-world
`````
## 自動起動
システム起動時に自動起動させる。
```console
brew services start colima
```
status が started になるには少し時間がかかる。
```console
% brew services list
Name Status User File
colima started oppara ~/Library/LaunchAgents/homebrew.mxcl.colima.plist
```
## 環境
```console
% colima --version
colima version 0.9.1
% docker --version
Docker version 28.4.0, build d8eb465
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode で Mermeid を扱う"
date: "2026-01-04"
--------------------------------------------------------------------------------
## はじめに
VSCode で Mermeid を扱うための備呆録。
## インストールしたプラグイン
* [Mermaid Markdown Syntax Highlighting](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting)
## そのほか
[Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced) でプレビュー可能だったので [Markdown Preview Mermaid Support](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid) のインストールは不要だった。
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode で PlantUML を扱う"
date: "2025-12-30"
--------------------------------------------------------------------------------
## はじめに
VSCode で PlantUML を扱うための備呆録。
## インストールしたプラグイン
- [PlantUML](https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml)
## ローカルのサーバで動かす
java 等諸々のインストールが面倒なので Docker で plantuml-server を動かす。
```yaml
services:
plantuml-server:
image: plantuml/plantuml-server
container_name: plantuml-local-server
ports:
- "9876:8080"
```
コンテナを立ち上げる。
```shell
docker compose up -d
```
## 設定
```json:settings.json
{
"plantuml.render": "Local",
"plantuml.server": "http://localhost:9876",
"markdown-preview-enhanced.plantumlServer": "http://localhost:9876/svg/"
}
```
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode で Markdown を扱う"
date: "2025-12-29"
--------------------------------------------------------------------------------
## はじめに
VSCode で Markdown を扱うための備呆録。
## インストールしたプラグイン
* [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
* [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced)
* [markdownlint](https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint)
## 見出し (Table of Contents) の作成
見出しを作成したい行で、Cmd + Shift + p から `Markdown All in One: Create Table of Contents` を選択する。
目次にする範囲を制限する設定。
```json:settings.json
{
"markdown.extension.toc.levels": "2..4"
}
```
## セクション番号の追加/削除
Cmd + Shift + p から `Markdown All in One: Add/Update section numbers` を選択する。
## プレビュー
* Cmd + Shift + p から ``Markdown Preview Enhanced: Open preview to the Side を選択する。
* もしくは Cmd + K V でプレビューをサイドに表示できる。
* 改行コードで改行させる設定。
```json:settings.json
{
"markdown-preview-enhanced.breakOnSingleNewLine": true,
}
```
## PDF へのエクスポート
Markdown Preview Enhanced の画面を右クリックして、`Export -> Chrome(Puppeteer) -> PDF` を選択する。
## markdownlint の設定
```json:settings.json
{
"[markdown]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
},
}
```
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode で PHP Intelephense"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode に PHP Intelephense をインストールした際の備呆録。
## 手順
1. [PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client) をインストール
2. 組込みの VSCode PHP 言語機能を無効にする
- 機能拡張 (Extensions) を開く
- @builtin php で検索
- 「PHP 言語機能」(PHP Language Features) を無効化する
3. ライセンスキーの設定
- Ctrl + Shift + P (Cmd + Shift + P) でコマンドパレットを開いて、licence key で検索。
- ライセンスキーを入力する
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode で GitHub Copilot"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode に GitHub Copilot と GitHub Copilot Chat をインストールした際の備呆録。
## 手順
以下をインストールする。
- [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot)
- [GitHub Copilot Chat](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot-chat)
同期設定で GitHub を使っていたためか、インストールしただけで連携できていた...
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode の同期設定"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode の同期設定の備呆録。
## 手順
1. 「Code」-> 「基本設定」-> 「バックアップと同期の設定」 を選択する。
{{< figure src="vscode_01.png" alt="" >}}
2. サインインを求められるので、GitHub アカウントでサインインする。
{{< figure src="vscode_02.png" alt="" >}}
## GitHub で確認
Settings -> Applications -> Authorized OAuth Apps
{{< figure src="vscode_03.png" alt="" >}}
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode に Neovim プラグインをインストール"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode に Neovim プラグインをインストールした際の備呆録。
## 手順
1. [VSCode Neovim](https://marketplace.visualstudio.com/items?itemName=asvetliakov.vscode-neovim) をインストールして VSCode を再起動する。
2. 以下のダイアログが表示されるので[Yes]をクリックする。
{{< figure src="neovim_01.png" alt="" >}}
3. 再起動しろとダイアログが表示されるので[Restart]をクリックする。
{{< figure src="neovim_02.png" alt="" >}}
4. 何も起こらなかったので手動で VSCode を再起動する。
以下の設定がされていた。
{{< figure src="vscode_affinity.png" alt="" >}}
## キーリピートできない問題の対応
以下を実行し Mac を再起動する。
```shell
defaults write -g ApplePressAndHoldEnabled -bool false
```
設定されているか確認するには、以下を実行し、0 か false が表示されれば OK。
```shell
defaults read -g ApplePressAndHoldEnabled
```
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% nvim --version
NVIM v0.11.5
Build type: Release
LuaJIT 2.1.1765228720
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode エディタ関連の設定"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode エディタ関連の設定の備呆録。
## テーマの変更
1. [kanagawa-vscode-theme](https://github.com/metapho-re/kanagawa-vscode-theme) をインストール
2. Cmd + K から Cmd + T で Kanagawa Wave を選択
## フォントの設定
1. Cmd + ,
2. 検索窓に font と入力
3. Editor: Font Size を 13 に変更
4. Editor: Font Family に [HackGen Console NF](https://github.com/yuru7/HackGen) を設定
5. 検索窓に terminal font と入力
6. Terminal › Integrated: Font Size を 14 に変更
## 文字コードの自動判別
1. Cmd + ,
2. 検索窓に encoding と入力
3. Files: Auto Guess Encoding にチェック
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "VSCode の日本語化と言語の切り替え"
date: "2025-12-27"
--------------------------------------------------------------------------------
## はじめに
VSCode の日本語化と言語の切り替えの備呆録。
## 日本語化
以下をインストールして再起動。
[Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja)
## 言語の切り替え
1. Ctlr + Shift + P でコマンドパレットを開き、`disp` と入力
2. "Configure Display Language" を表示して Enter をたたく
3. 切り替えたい言語を選択して Enter をたたく
## 環境
```console
% code --version
1.107.1
994fd12f8d3a5aa16f17d42c041e5809167e845a
arm64
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "Google Drive で draw.io を扱う"
date: "2025-12-11"
--------------------------------------------------------------------------------
## はじめに
Google Drive で draw.io を扱う備呆録。
## 手順
1. 以下 Google Workspace Marketplace で draw.io のページを表示する。
[draw.io - Google Workspace Marketplace](https://workspace.google.com/marketplace/app/drawio/671128082532?flow_type=2)
2. 「インストール」 ボタンをクリック。
3. 諸々認証を行う。
4. 初めて draw.io でファイルを作成した際も認証を求めら得るので諸々認証を行う。
## 環境
特になし。
--------------------------------------------------------------------------------
title: "CLI で AWS IAM ユーザーを作成"
date: "2025-09-12"
--------------------------------------------------------------------------------
## はじめに
CLI で AWS IAM ユーザーを作成方法の備呆録
## 手順
ユーザー名を環境変数に設定する。
```console
USER_NAME="hoge”
```
ユーザーを作成する。
```console
aws iam create-user --user-name "${USER_NAME}"
```
ユーザーを admin グループに追加する。
```console
aws iam add-user-to-group --user-name "${USER_NAME}" \
--group-name admin
```
パスワード更新必須で初期パスワード (p4ssw0rd) を設定する。
```console
aws iam create-login-profile --user-name "${USER_NAME}" \
--password p4ssw0rd \
--password-reset-required
```
アクセスキーを作成する。
```console
aws iam create-access-key --user-name "${USER_NAME}"
```
## 参考サイト
- [create-user — AWS CLI 2.29.1 Command Reference](https://docs.aws.amazon.com/cli/latest/reference/iam/create-user.html)
## 環境
```console
$ aws --version
aws-cli/2.28.26 Python/3.13.7 Linux/6.1.147-172.266.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
```
--------------------------------------------------------------------------------
title: "VSCode を使わない環境での Intelephense のライセンスキーの設定方法"
date: "2025-08-12"
--------------------------------------------------------------------------------
## はじめに
VSCode を使わない環境での Intelephense のライセンスキーの設定方法の備呆録
## 対応方法
以下のテキストファイルにライセンスキーを記載する。
```text
~/intelephense/licence.txt
```
## 参考サイト
- [Intelephense -- Frequently Asked Questions (FAQ)](https://intelephense.com/faq.html)
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 15.6
BuildVersion: 24G84
```
--------------------------------------------------------------------------------
title: "シェルスクリプトを使用して、AWS SESでメールを送信する"
date: "2025-06-01"
--------------------------------------------------------------------------------
## はじめに
シェルスクリプトを使用して、AWS SES でメールを送信する備呆録。
## 手順
```bash
#!/usr/bin/env bash
set -CEeuo pipefail
SES_FROM="admin@oppara.tv"
SES_TO="admin@oppara.tv"
SES_REGION="ap-northeast-1"
SES_SUBJECT="テストメール from SES"
SES_BODY="ほげほげ"
aws ses send-email \
--from "$SES_FROM" \
--destination "ToAddresses=$SES_TO" \
--message "Subject={Data=$SES_SUBJECT,Charset=utf-8},Body={Text={Data=$SES_BODY,Charset=utf-8}}" \
--region "$SES_REGION"
```
## 環境
```console
% aws --version
aws-cli/2.27.26 Python/3.13.3 Darwin/24.3.0 source/arm64
```
--------------------------------------------------------------------------------
title: "SELinux で httpd からのファイルへのアクセスを許可する"
date: "2025-02-20"
--------------------------------------------------------------------------------
## はじめに
SELinux で httpd からのファイルへのアクセスを許可する方法の備忘録。
## 前提
`/var/app/tmp` に httpd からアクセスする場合を想定する。
## 対応方法
```
# chcon -R -t httpd_sys_rw_content_t /var/app/tmp
```
永続化
```
# semanage fcontext -a -t httpd_sys_rw_content_t /var/app/tmp
```
確認
```
# ls -alFZ /var/app/tmp
```
## 参考サイト
- [SELinuxでApacheからのファイルへのアクセスを許可する - tech-notes](https://scrapbox.io/tech-notes/SELinux%E3%81%A7Apache%E3%81%8B%E3%82%89%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B)
## 環境
```console
$ cat /etc/system-release
Amazon Linux release 2023.6.20250123 (Amazon Linux)
```
--------------------------------------------------------------------------------
title: "PHP リトライのテンプレート"
date: "2025-01-13"
--------------------------------------------------------------------------------
## はじめに
よく忘れるので、備呆録。
## 手順
```php
getMessage() . PHP_EOL;
$delay = $sleep * $i;
echo "delay: $delay" . PHP_EOL;
sleep($delay);
}
}
throw new Exception('Failed after ' . $retries . ' retries');
}
function hoge()
{
throw new Exception('error');
}
retry(3, 1, 'hoge');
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 15.2
BuildVersion: 24C101
% php -v
PHP 8.2.27 (cli) (built: Dec 17 2024 11:39:23) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.27, Copyright (c) Zend Technologies
with Zend OPcache v8.2.27, Copyright (c), by Zend Technologies
```
--------------------------------------------------------------------------------
title: "Fluentd で dry-run"
date: "2025-01-12"
--------------------------------------------------------------------------------
## はじめに
[Fluentd](https://www.fluentd.org/) で設定ファイルを確認する方法についての備呆録。
## CLI
```console
% fluentd --dry-run -c /etc/fluentd/fluent.conf
```
## Docker
プラグイン使っている場合は、あらかじめインストールしておく必要がある。
```console
% docker run \
-ti --rm \
--platform linux/x86_64 \
-v ./:/fluentd/etc -v ./:/var/log \
fluent/fluentd:v1.8-debian-1 --dry-run -c /fluentd/etc/hoge.conf
fluentd --dry-run -c /fluentd/etc/hoge.conf
2025-01-12 09:07:29 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/hoge.conf"
2025-01-12 09:07:29 +0000 [info]: gem 'fluentd' version '1.8.1'
2025-01-12 09:07:29 +0000 [info]: starting fluentd-1.8.1 as dry run mode ruby="2.6.5"
2025-01-12 09:07:29 +0000 [info]: using configuration file:
@type tail
path "/var/log/httpd-access.log"
pos_file "/var/log/td-agent/httpd-access.log.pos"
tag "s3.apache.access"
@type "apache2"
@type file
path "/var/log/fluent/myapp"
compress gzip
timekey 1d
timekey_use_utc true
timekey_wait 10m
path "/var/log/fluent/myapp"
2025-01-12 09:07:29 +0000 [info]: finsihed dry run mode
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 15.2
BuildVersion: 24C101
% docker --version
Docker version 27.4.0, build bde2b89
```
--------------------------------------------------------------------------------
title: "MySQL ですべてのテーブルを削除する"
date: "2024-10-31"
--------------------------------------------------------------------------------
## はじめに
MySQL でデータベース内のすべてのテーブルを削除する方法の備忘録。
## 手順
DROP 文を作成して実行する。
```console
$ echo "SET FOREIGN_KEY_CHECKS = 0;" > /patht/to/tmp.sql
$ mysqldump -h $DB_HOST --single-transaction --add-drop-table --no-data -u $DB_USER -p $DB_NAME | grep 'DROP TABLE' >> /path/to/tmp.sql
$ echo "SET FOREIGN_KEY_CHECKS = 1;" >> /path/to/tmp.sql
$ mysql -h $DB_HOST -u $DB_USER -p $DB_NAME < /path/to/tmp.sql
```
--------------------------------------------------------------------------------
title: "運用中で指定した名前の EC2 のプライベートアドレスを取得する"
date: "2024-09-02"
--------------------------------------------------------------------------------
```bash
TARGET_TAG="hoge"
aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:Name,Values=${TARGET_TAG}" \
| jq -r '.Reservations[].Instances[] | .PrivateIpAddress '
```
`ec2:DescribeInstances`ポリシーが必要。
## 環境
```console
$ aws --version
aws-cli/2.17.41 Python/3.11.9 Linux/6.1.102-111.182.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
```
--------------------------------------------------------------------------------
title: "1 秒に 1 回サーバにアクセスするコマンド"
date: "2024-06-06"
--------------------------------------------------------------------------------
## 使いどころ
例えば、サーバのアップグレード時に、実際に通信が途切れてないか 1 秒に 1 回サーバにアクセスして接続を確認したい時とか。
## 手順
```console
url=https://oppara.tv/
while true; do TZ=JST-9 date; curl -I "$url"; sleep 1s; done
```
Mac の場合
```console
url=https://oppara.tv/
while true; do TZ=JST-9 date; curl -I $url; sleep 1; done
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 14.4.1
BuildVersion: 23E224
```
--------------------------------------------------------------------------------
title: "WordPress の管理画面でチェックされたカテゴリーが上に表示されるのを抑止する"
date: "2024-05-29"
--------------------------------------------------------------------------------
## 問題
WordPress の管理画面でカテゴリーをチェックすると、そのカテゴリーが上に表示されるのを止めたい。
## 対応方法
```php
add_filter('wp_terms_checklist_args', function($args) {
$args['checked_ontop'] = false;
return $args;
});
```
## 参考サイト
- [WordPressの設置の際に気を配りたい。カテゴリーの階層構造について | 株式会社LIG(リグ)|DX支援・システム開発・Web制作](https://liginc.co.jp/programmer/archives/2931)
## 環境
```console
% wp core version
6.5.3
```
--------------------------------------------------------------------------------
title: "Zabbix `Disk space is low` トリガーの条件"
date: "2024-05-02"
--------------------------------------------------------------------------------
## はじめに
Zabbix のトリガー `/: Disk space is low` の条件の備呆録
## `/: Disk space is low` トリガーの条件
```
last(/oppara.tv/vfs.fs.size[/,pused])>{$VFS.FS.PUSED.MAX.WARN:"/"} and ((last(/oppara.tv/vfs.fs.size[/,total])-last(/oppara.tv/vfs.fs.size[/,used]))<{$VFS.FS.FREE.MIN.WARN:"/"} or timeleft(/oppara.tv/vfs.fs.size[/,pused],1h,100)<1d)
```
見やすく整形してみる。
```
last(/oppara.tv/vfs.fs.size[/, pused]) > {$VFS.FS.PUSED.MAX.WARN:"/"}
and
(
(last(/oppara.tv/vfs.fs.size[/, total]) - last(/oppara.tv/vfs.fs.size[/, used])) < {$VFS.FS.FREE.MIN.WARN:"/"}
or
timeleft(/oppara.tv/vfs.fs.size[/, pused], 1h, 100) < 1d
)
```
日本語にしてみる。
```
ディスク使用率が $VFS.FS.PUSED.MAX.WARN より大きい
かつ
(
ディスク残量が $VFS.FS.FREE.MIN.WARN より小さい
もしくは
1日以内にディスク使用率が100%となる
)
```
## 環境
```console
$ zabbix_server --version
zabbix_server (Zabbix) 6.0.23
```
--------------------------------------------------------------------------------
title: "openssl を使って証明書を確認"
date: "2024-02-17"
--------------------------------------------------------------------------------
## はじめに
openssl を使って証明書の諸々を確認する方法の備忘録。
## 証明書のコモンネームと有効開始日・有効期限日を確認する
```console
% openssl x509 -noout -subject -dates -in oppara.tv.crt
subject=CN=oppara.tv
notBefore=Jan 31 19:06:53 2024 GMT
notAfter=Apr 30 19:06:52 2024 GMT
```
## 証明書と秘密鍵の「整合性」を確認する
ハッシュが同じであれば整合性が取れている。
```console
% openssl x509 -noout -modulus -in oppara.tv.cert | md5sum
48f8be8df2822b4f302fc16276566f9e -
% openssl rsa -noout -modulus -in oppara.tv.key | md5sum
48f8be8df2822b4f302fc16276566f9e -
```
## 証明書と中間証明書の「整合性」を確認する
ハッシュが同じであれば整合性が取れている。
```console
% openssl x509 -issuer_hash -noout -in oppara.tv.cert
8d33f237
% openssl x509 -subject_hash -noout -in chain.cert
8d33f237
```
## リモートの証明書のコモンネームと有効開始日・有効期限日を確認する
```console
% echo | openssl s_client -connect oppara.tv:443 2> /dev/null | openssl x509 -noout -subject -dates 2> /dev/null
subject=CN=oppara.tv
notBefore=Jan 14 00:17:24 2024 GMT
notAfter=Apr 13 00:17:23 2024 GMT
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 14.2.1
BuildVersion: 23C71
% openssl -version
OpenSSL 3.2.1 30 Jan 2024 (Library: OpenSSL 3.2.1 30 Jan 2024)
```
--------------------------------------------------------------------------------
title: "Intel One Mono を使う"
date: "2024-01-29"
--------------------------------------------------------------------------------
## はじめに
中括弧({})が特徴的な、[Intel One Mono](https://github.com/intel/intel-one-mono) を使ってみる。
{{< figure src="font.png" alt="" >}}
{{< figure src="typeface.png" alt="" >}}
## インストール
```console
% install homebrew/cask-fonts/font-intel-one-mono
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 14.2.1
BuildVersion: 23C71
% brew --version
Homebrew 4.2.5
```
--------------------------------------------------------------------------------
title: "AWS CLIからテストメールを送信"
date: "2024-01-27"
--------------------------------------------------------------------------------
## はじめに
AWS CLIからテストメールを送信する方法を備忘録。
## 手順
```console
$ to="test@example.com"
$ aws ses send-email \
--from info@oppara.tv \
--to "${to}" \
--subject "件名" \
--text "本文"
```
## 環境
```console
$ aws --version
aws-cli/2.15.13 Python/3.11.6 Linux/6.1.66-91.160.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023 prompt/off
```
--------------------------------------------------------------------------------
title: "ローカルで Web サーバーを立てる"
date: "2024-01-10"
--------------------------------------------------------------------------------
## Node.js
```
npx serve
```
port 指定する場合。
```
npx serve -p 1192
```
[serve - npm](https://www.npmjs.com/package/serve)
## Python
```
python -m http.server 1192
```
[http.server --- HTTP サーバ — Python 3.10.13 ドキュメント](https://docs.python.org/ja/3.10/library/http.server.html)
## PHP
```
php -S localhost:1192
```
[PHP: ビルトインウェブサーバー - Manual](https://www.php.net/manual/ja/features.commandline.webserver.php)
## まとめ
静的コンテンツは node で。PHP が絡む場合は php で。
## 環境
```console
% node -v
v21.5.0
% npx -v
10.2.4
% python --version
Python 3.10.6
% php -v
PHP 8.3.1 (cli) (built: Dec 20 2023 12:44:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies
% sw_vers
ProductName: macOS
ProductVersion: 14.2.1
BuildVersion: 23C71
```
--------------------------------------------------------------------------------
title: "CLI で Aurora Serverless V1 を作成する"
date: "2023-11-25"
--------------------------------------------------------------------------------
## はじめに
マネジメントコンソールで Aurora Serverless V1 を作成できないので、AWS CLI の覚書。
## 手順
```shell
DATABASE_NAME="try_db"
DB_CLUSTER_IDENTIFIER="try-cluster"
VPC_SECURITY_GROUP_IDS="sg-016afba3d02181db5"
MASTER_USERNAME="admin"
MASTER_USER_PASSWORD="p4ssw0rd"
DB_SUBNET_GROUP_NAME="try-db-subnet-group"
aws rds create-db-cluster \
--database-name "${DATABASE_NAME}" \
--db-cluster-identifier "${DB_CLUSTER_IDENTIFIER}" \
--vpc-security-group-ids "${VPC_SECURITY_GROUP_IDS}" \
--master-username "${MASTER_USERNAME}" \
--master-user-password "${MASTER_USER_PASSWORD}" \
--db-subnet-group-name "${DB_SUBNET_GROUP_NAME}" \
--availability-zones ap-northeast-1a ap-northeast-1c ap-northeast-1d \
--engine aurora-mysql \
--engine-version 5.7.mysql_aurora.2.08.3 \
--engine-mode serverless \
--scaling-configuration '{"MinCapacity":1,"MaxCapacity":2,"AutoPause":true,"SecondsUntilAutoPause":300,"TimeoutAction":"ForceApplyCapacityChange","SecondsBeforeTimeout":60}'
```
## 参考
- [Aurora Serverless v1 DB クラスターの作成 - Amazon Aurora](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.create.html)
- [create-db-cluster — AWS CLI 2.13.38 Command Reference](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/create-db-cluster.html)
## 環境
```console
$ aws --version
aws-cli/2.13.35 Python/3.11.6 Linux/6.1.59-84.139.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off
```
--------------------------------------------------------------------------------
title: "Next.js で Basic 認証をかける"
date: "2023-11-20"
--------------------------------------------------------------------------------
## 対応方法
middleware を使用する。
```typescript:middleware.ts
// middleware.ts
import { NextResponse, NextRequest } from 'next/server';
export const config = {
// /hoge/ 以下のパスに対して Basic 認証をかける
matcher: ['/hoge/:path*'],
}
export function middleware(req: NextRequest) {
const basicAuth = req.headers.get('authorization');
if (basicAuth) {
const authValue = basicAuth.split(' ')[1];
const [user, password] = atob(authValue).split(':');
if (user === process.env.BASIC_AUTH_USER
&& password === process.env.BASIC_AUTH_PASSWORD) {
return NextResponse.next();
}
}
return new NextResponse('Unauthorized', {
status: 401,
headers: {
'WWW-Authenticate': 'Basic realm="Secure Area"',
},
});
};
```
```bash
# .env.local
BASIC_AUTH_USER=foo
BASIC_AUTH_PASSWORD=bar
```
## 環境
```console
% npx next -v
Next.js v14.0.3
```
--------------------------------------------------------------------------------
title: "Next.js で IP アドレスを使用したアクセス制限を行う"
date: "2023-11-20"
--------------------------------------------------------------------------------
## 対応方法
middleware を使用する。
```typescript:middleware.ts
// middleware.ts
import { NextResponse, NextRequest } from 'next/server';
const validAddresses = new Set();
if (process.env.VALID_IP_ADDRESSES) {
process.env.VALID_IP_ADDRESSES!.split(',').forEach((address) => {
validAddresses.add(address.trim());
})
}
export function middleware(req: NextRequest) {
let ip: string = req.ip ?? req.headers.get('x-real-ip') ?? '';
// with CDN or LB or next dev
if (!ip && req.headers.get('x-forwarded-for')) {
ip = req.headers.get('x-forwarded-for')?.split(',')[0] ?? '';
}
if (!validAddresses.has(ip)) {
const tmp = {
status: 403,
url: req.url,
host: req.nextUrl.host,
};
console.log(JSON.stringify(tmp));
return new NextResponse(null, { status: 401 });
}
return NextResponse.next();
};
```
```bash
# .env.local
VALID_IP_ADDRESSES=127.0.0.1,::1
```
## 環境
```console
% npx next -v
Next.js v14.0.3
```
--------------------------------------------------------------------------------
title: "ログローテートの覚書"
date: "2023-11-06"
--------------------------------------------------------------------------------
## はじめに
ログローテートの dry-run、実行方法についての覚書。
## Usage
dry-run 実行
```shell
logrotate -d /etc/logrotate.conf
```
実行
```shell
logrotate -f /etc/logrotate.conf
```
設定ファイルを指定して実行
```shell
logrotate -f /etc/logrotate.d/httpd
```
--------------------------------------------------------------------------------
title: "textlint で dry run"
date: "2023-10-19"
--------------------------------------------------------------------------------
## はじめに
[textlint](https://textlint.github.io/) の dry-run をよく忘れるので覚書。
そもそもデフォルトが dry-run だった。
## Usage
```console
npx textlint /path/to/target
```
キャッシュなし、設定ファイル指定の場合。
```console
npx textlint --no-cache -c /path/to/textlintrc /path/to/target
```
自動修正時の場合。
```console
npx textlint --dry-run --fix /path/to/target
```
## 環境
```console
% npx textlint --version
v13.3.3
% sw_vers
ProductName: macOS
ProductVersion: 14.0
BuildVersion: 23A344
```
--------------------------------------------------------------------------------
title: "stree を使ってみる"
date: "2023-10-09"
--------------------------------------------------------------------------------
## はじめに
便利そうなので使ってみる。
- [orangekame3/stree: 📁Directory trees of AWS S3 Bucket](https://github.com/orangekame3/stree)
- [stree:S3バケットをtreeするCLIコマンド | フューチャー技術ブログ](https://future-architect.github.io/articles/20230926a/)
## インストール
Homebrew でインストールする。
```console
% brew install orangekame3/tap/stree
```
## ちょい、はまる。
```console
% stree my-bucket
ignoring argument my-bucket (path check I)
No Git or Mercurial URLs found in arguments or current working path, see stree --help
```
は?
```console
% which stree
/opt/homebrew/bin/stree
% ll /opt/homebrew/bin | grep stree
lrwxr-xr-x 1 oppara admin 53B Oct 28 2022 stree -> /Applications/Sourcetree.app/Contents/Resources/stree
```
Sourcetree の CLI がインストールされていたので削除する。
```console
% rm /opt/homebrew/bin/stree
```
## 設定
config と credentials をよしなに設定する。
~/.aws/config
```toml
[oppara]
region = ap-northeast-1
output = json
```
~/.aws/credentials
```toml
[oppara]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXX
```
## 実行
```console
% stree opp-my-bucket --profile oppara --no-color
opp-my-bucket
├── foo
│ └── bar
│ └── baz.toml
└── hoge.md
2 directories, 2 files
```
## 環境
```console
% sw_vers
ProductName: macOS
ProductVersion: 14.0
BuildVersion: 23A344
```
--------------------------------------------------------------------------------
title: "シェルスクリプトで Usage 表示"
date: "2023-10-05"
--------------------------------------------------------------------------------
## はじめに
簡易敵な Usage 表示
## 実装
```bash
#!/usr/bin/env bash
#/ Usage:
#/ awsome-script [-h | -help] []
#/
#/ Example
#/ awsome-script foo
#/ awsome-script foo 3
#/
set -e
usage () {
grep '^#/' < "$0" | cut -c4-
exit 0
}
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
usage
fi
NAME=$1
COUNT=${2:-0}
echo "$NAME" "$COUNT"
```
## 実行
```
% /path/to/awsome-script -h
Usage:
awsome-script [-h | -help] []
Example
awsome-script foo
awsome-script foo 3
% /path/to/awsome-script foo
foo 0
```
--------------------------------------------------------------------------------
title: "Postfix 覚書"
date: "2023-10-03"
--------------------------------------------------------------------------------
## 主要な項目の説明
- myhostname:DNS で正引きできる(A レコードが存在する)ホスト名。
DNS 正引きの IP アドレスと、Postfix を設定するサーバの IP アドレスが一致する必要はない!
- mydomain:ドメイン名を FQDN で指定
- myorigin:アプリケーションからのメール送信時に From アドレスのドメインとして使用する名前
最終的に、myorigin に設定するドメインに、逆引き、SPF レコードの設定が必要。
## 設定例
```postfix
myhostname = mail01.example.com
mydomain = example.com
myorigin = $mydomain
mydestination =
```
## コマンド
### main.cf の確認
```
# postfix check
```
### 再起動
```
# service postfix restart
```
--------------------------------------------------------------------------------
title: "www ありなしの RewiteRule"
date: "2023-09-22"
--------------------------------------------------------------------------------
## www ありの https のURLに統一
```apache
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
```
## www なしの https のURLに統一
```apache
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
```
--------------------------------------------------------------------------------
title: "WordPress の管理画面でプラグインの URL を取得する"
date: "2023-07-18"
--------------------------------------------------------------------------------
## 目的
WordPress の管理画面で独自プラグインの URL を取得したい。
## 対応方法
```php
funtcion getPluginUrl()
{
return admin_url('admin.php?page=' . プラグインのスラッグ);
}
```
--------------------------------------------------------------------------------
title: "WordPress でスラッグにスラッシュを含ませたい"
date: "2023-05-20"
--------------------------------------------------------------------------------
## 問題
WordPress でスラッグにスラッシュを含ませられない。
スラッシュがハイフンに変換されてしまう。。。
## 対応方法
[sanitize_title_with_dashes](https://github.com/WordPress/WordPress/blob/6.2.2/wp-includes/formatting.php#L2258) という関数でフィルタしてるので削除する。
ただし、フィルタを削除すると、[URI エンコード](https://github.com/WordPress/WordPress/blob/6.2.2/wp-includes/formatting.php#L2267-L2272) されなくなるので自前でエンコードする。
```php
remove_filter('sanitize_title', 'sanitize_title_with_dashes');
// URI エンコードを行う
add_filter('sanitize_title', function ($title) {
if (seems_utf8($title)) {
if (function_exists('mb_strtolower')) {
$title = mb_strtolower($title, 'UTF-8');
}
$title = utf8_uri_encode($title, 200);
}
return $title;
});
```
--------------------------------------------------------------------------------
title: "WordPress で外観メニュー内に「メニュー」表示されない件"
date: "2023-05-19"
--------------------------------------------------------------------------------
## 問題
自分で作成したテーマを使用した場合、サイドメニュー -> 外観メニュー内に「メニュー」が表示されない。
## 対応方法
```php
add_action('after_setup_theme', function(): void {
register_nav_menu('primary', __('Primary Menu', 'theme-slug'));
});
```
--------------------------------------------------------------------------------
title: "シェルスクリプトでディレクトリ名やファイル名を取得したい"
date: "2023-05-02"
--------------------------------------------------------------------------------
## 目的
よく忘れるので備忘録。
よく使うのは `##*/`, `%/*`
## パターン
| パターン | 説明 |
|------|----------------------------------|
| ${var#pattern} | var の先頭から pattern の最短一致を削除する。 |
| ${var##pattern} | var の先頭から pattern の最長一致を削除する。 |
| ${var%pattern} | var の末尾から pattern の最短一致を削除する。 |
| ${var%%pattern} | var の末尾から pattern の最長一致を削除する。 |
```shell
#!/bin/sh
path="/etc/httpd/httpd.conf"
# ファイル名
echo ${path##*/}
# ディレクトリ名
echo ${path%/*}
# 拡張子を除いたファイル名
echo ${path%.*}
# 拡張子
echo ${path##*.}
```
--------------------------------------------------------------------------------
title: "Neovim のインストール"
date: "2023-04-27"
--------------------------------------------------------------------------------
## 目的
Neovim を使いたい。
## 対応方法
[Homebrew](https://brew.sh/) でインストールする。
```console
brew install neovim
```
開発バージョンをインストールする。
```console
brew install --HEAD neovim
```
開発バージョンをアップデートする。
```console
brew upgrade neovim --fetch-HEAD
```
## 参考サイト
- [Installing Neovim · neovim/neovim Wiki](https://github.com/neovim/neovim/wiki/Installing-Neovim#macos--os-x)
## 環境
```console
% nvim --version
NVIM v0.9.0
Build type: Release
LuaJIT 2.1.0-beta3
% sw_vers
ProductName: macOS
ProductVersion: 13.3
BuildVersion: 22E252
```
--------------------------------------------------------------------------------
title: "XDG Base Directory のデフォルト値まとめ"
date: "2023-04-26"
--------------------------------------------------------------------------------
## はじめに
XDG_ほにゃららの環境変数のデフォルト値を忘れてしまうのでまとめ。
## まとめ
### XDG_CONFIG_HOME
ユーザー個別の設定が書き込まれるディレクトリ。
```
echo "${XDG_CONFIG_HOME:-$HOME/.config}"
```
### XDG_DATA_HOME
ユーザー個別のデータファイルが書き込まれるディレクトリ。
```
echo "${XDG_DATA_HOME:-$HOME/.share}"
```
### XDG_STATE_HOME
ユーザー個別の状態ファイルをが書き込まれるディレクトリ。
```
echo "${XDG_STATE_HOME:-$HOME/.state}"
```
### XDG_CACHE_HOME
ユーザー個別の重要でない (キャッシュ) データが書き込まれるディレクトリ。
```
echo "${XDG_CACHE_HOME:-$HOME/.cache}"
```
## 参考サイト
- [XDG Base Directory - ArchWiki](https://wiki.archlinux.jp/index.php/XDG_Base_Directory)
--------------------------------------------------------------------------------
title: "GitLab に登録している公開鍵を取得したい"
date: "2022-10-07"
--------------------------------------------------------------------------------
## 目的
GitLab に登録している公開鍵を手軽に取得したい。
## 対応方法
GitLab のユーザーページの URL の後ろに `.keys` をつける。
### 例
- GitLab のホスト: gitlab.oppara.tv
- ユーザー名: oppara
```
% curl https://gitlab.oppara.tv/oppara.keys
```
## 参考サイト
- [GitHub に登録した SSH 公開鍵は全世界に公開されている | 774::Blog](https://blog.id774.net/entry/2013/12/16/441/)
```
% curl https://github.com/oppara.keys
```
--------------------------------------------------------------------------------
title: "APG4b を Mac 上で確認したい"
date: "2022-09-24"
--------------------------------------------------------------------------------
## 目的
[C++入門 AtCoder Programming Guide for beginners (APG4b)](https://atcoder.jp/contests/apg4b) の解答を Mac 上で確認したい。
## 対応方法
以下のファイルを作成して
~/apg4b/include/bits/stdc++.h
```cpp
#include // cout, endl, cin
#include // string, to_string, stoi
#include // vector
#include // min, max, swap, sort, reverse, lower_bound, upper_bound
#include // pair, make_pair
#include // tuple, make_tuple
#include // int64_t, int*_t
#include // printf
#include