Hugoでかんたんpermalinks作成

SEO対策として、一応このブログにもパーマリンクを仕込むか〜〜〜となったときの備忘録。 ただ僕はそもそもパーマリンク自体あんまり良くわかってなかったので、そこから調べました。 そもそもパーマリンクって? SEO対策の一環として、ページに振られるURLを固有のものにすることです。 パーマリンクとは?SEOへの影響や注意点について解説 hugoの場合、デフォルト設定のままだと、タイトルとかディレクトリ構造をリファクタリングするとページURLも変わっちゃうので、せっかく検索して上位に来てもURLが変わっちゃったら全部台無しになっちゃいます。 それを防ぐためのパーマリンクです。 Hugoでパーマリンクは設定できる? 結論から言えば、公式でパーマリンクを生成する方法はありません。 前述の通り、Hugoが生成するページリンクは記事タイトルやディレクトリ構成に影響するため、後にタイトルを変えるといったケースがある場合にはそれに対応できません。 逆に言えば、そういった変更を今後一切行わないのであれば別にデフォルト設定のままでも十分ということになります。 なので、ここではhugoのテンプレート構文を利用してIDを生成する関数を実装します。 単純にランダムに英数字を並べかるだけでは味気ないので、せっかくなので現在時刻を元にしたmd5ハッシュを使ってID生成します。 archetypes/default.mdを開いて、以下のような実装を追記します。 --- title: "{{ replace .Name "-" " " }}" slug: "{{ template "permanentId" }}" date: {{ .Date }} draft: true --- {{ define "permanentId" -}} {{ md5 now.Unix }} {{- end -}} ハッシュ値はslugに設定しました。 次に、config.tomlからブログのパスにslugを参照するように設定します。 [permalinks] posts = "/:slug/" (postsの部分はcontentの名前によって変えてください) これであとはhugo newで記事を作ると、slugにハッシュ値が設定されるようになり、結果としてURLが時刻を元にしたmd5ハッシュ値になっています。 感想 Hugoおもしろい 参考 Hugoのテンプレート構文「template」「partial」「block」「define」のわかりやすい解説 Hugo でサイト構造を変えてもページの URL が変わらないようにする (Permalink) Hugo テンプレート内で define による部分テンプレート定義を行う(関数もどき) Hugo の URL をカスタマイズする

2023年7月9日 · にあえん

【Ubuntu】スクリーンショットのファイル名フォーマットを変更する方法

ブログの中でスクショを乗せることがあるんですが、Ubuntuの標準アプリで撮ったスクリーンショットのファイル名が、デフォルトだと空白文字を含んだ状態で保存されてしまいます。 これをブログに載せようと思ったら、空白文字をいちいちURLエンコードしないといけないことに気づいてしまいました。 そこで、あれこれやって空白文字をアンダースコアに置き換えて保存する方法を見つけたので共有します。 どうやったか まず標準アプリでフォーマットを指定できるか調べてみましたが、これはどうやらできないみたいです。 (設定項目に名前のフォーマットを指定するプロパティがありませんでした。) dconfエディターで確認した様子 そこで、しょうがないのでスクリーンショットが保存されるディレクトリを監視して、ファイルが作成されたらファイル名を空白文字からアンダースコアに書き換えるshを実装しました。 (ちなみに、shの実装は全部ChatGPTにおまかせしちゃいました。) 監視のためのサービスはsystemdに登録し、再起動してもちゃんと動いてくれるようにしました。 実装手順 まずはディレクトリ監視に必要なライブラリをインストールしておきます。 sudo apt install inotify-tools インストールできたら、スクリーンショットの保存先ディレクトリを監視してファイル名を置き換えるshを実装します。 以下が作成したshファイルです。 #!/bin/bash ### BEGIN INIT INFO # Provides: screenshot_monitor # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Screenshot Monitor # Description: Monitors directory for new screenshots and performs actions ### END INIT INFO # スクリーンショットの保存先ディレクトリ screenshot_dir="/home/[username]/Pictures/スクリーンショット" # 監視対象のイベントを指定してinotifywaitを実行し、新しいファイルが追加された場合にスクリプトを実行する inotifywait -m -e create -e moved_to "$screenshot_dir" | while read -r directory event filename; do # スペースをアンダースコアに置換 new_filename=${filename// /_} new_filepath="$screenshot_dir/$new_filename" # ファイル名の変更 mv "$directory$filename" "$new_filepath" done ([username]の部分は自身のユーザー名に置き換えてください) ...

2023年7月8日 · にあえん

(AWSの)SCP Is 何?

SAAの試験勉強で間違えた問題がSCPについての問題だったので少しまとめました。 SCPとは SCP(サービスコントロールポリシー)は、AWS Organizationsにおける組織のアクセス制御に関する設定のことです。 一人のIAMユーザーがある組織に属していたとした場合で考えてみます。 そのIAMユーザーにはIAMポリシーとして「EC2」「RDS」「S3」へのフルアクセス権限が振られていたとします。 しかし、このIAMユーザーの所属する組織のSCPでは「EC2」「ECS」「CloudWatch」のフルアクセス権限が振られています。 この場合どうなるかというと、「EC2」へのフルアクセスのみ可能になります。 ベン図にするとわかりやすいです。 このような形で権限の制御は行われるので、アクセス制御の設計を行う際は気をつけねば。。

2023年7月8日 · にあえん

NATゲートウェイの置き方とプライベートサブネットへの適用方法について

NATゲートウェイってどこに設置するんだっけ…?となったので。 NAT ゲートウェイを設定してみる - EC2 NATゲートウェイとは プライベートサブネットに配置されたリソースがインターネットに安全にアクセスするための方法です。 NATゲートウェイを設置することで、リソースは直接インターネットに晒されることなく安全に更新データなどのリクエストが可能になります。 使い方 まずNATゲートウェイはパブリックサブネットに設置します。 次に、プライベートサブネットのルートテーブルに、設置されたNATゲートウェイへのルートを追加します。 これでプライベートサブネットはNATゲートウェイを通じてインターネットにリクエストすることができるようになります。 NATゲートウェイだけでインターネットアクセスができる? 踏み台となるサーバーがなければできません。 インターネットにアクセスするまでのフローはこんな感じです。

2023年7月8日 · にあえん

aptからVSCodeを更新する

普通にやってればsudo apt install codeで更新できるみたいなんですが、僕の環境ではうまくできなかったので更新した際の備忘録として書いときます。 結論として、以下のコマンドで公式からダウンロードしてaptでインストールできます。 wget --trust-server-names=on "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64" && \ ls -d ./* | grep "code_" | xargs sudo apt install ダウンロード先のURLは、debianに対応したバージョンのVSCodeになっています。 (もしも違うOSを使用している場合はこのURLの部分を変えてください。) wgetの--trust-server-namesオプションを使用してあげると、リダイレクト先のファイル名を使用してダウンロードしてくれます。 ダウンロードしたファイル名はcode_から始まっているため、その名前でgrepしてapt installに渡してあげています。 これでインストールできます。 参考 VSCodeの公式ページ LinuxにVisual Studio Codeをインストールする SourceForgeからwgetする時正しいファイル名で保存する

2023年7月8日 · にあえん

apt updateが「以下の署名が無効です」で失敗した

aptでVSCodeをアップデートしようとしたら以下のようなエラーが出力されました。 % sudo apt update ヒット:1 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy InRelease ヒット:2 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-updates InRelease ヒット:3 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-backports InRelease ヒット:4 https://cli.github.com/packages stable InRelease ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-security InRelease 取得:6 https://apt.releases.hashicorp.com jammy InRelease [12.9 kB] ヒット:7 https://brave-browser-apt-release.s3.brave.com stable InRelease 取得:8 https://dl.k6.io/deb stable InRelease [4,149 B] エラー:6 https://apt.releases.hashicorp.com jammy InRelease 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 エラー:8 https://dl.k6.io/deb stable InRelease 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> ヒット:9 https://ppa.launchpadcontent.net/cartes/drawing/ubuntu jammy InRelease ヒット:10 https://ppa.launchpadcontent.net/jonmagon/kdiskmark/ubuntu jammy InRelease 17.0 kB を 3秒 で取得しました (6,203 B/s) パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了 アップグレードできるパッケージが 4 個あります。表示するには 'apt list --upgradable' を実行してください。 W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://apt.releases.hashicorp.com jammy InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.k6.io/deb stable InRelease: 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> W: https://apt.releases.hashicorp.com/dists/jammy/InRelease の取得に失敗しました 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 W: https://dl.k6.io/deb/dists/stable/InRelease の取得に失敗しました 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。 インストールしているK6とTerraformに関連したリポジトリの更新に失敗しています。 ...

2023年7月8日 · にあえん

S3のStandardとOneZoneの使い分け方

SAAの問題で使い分けについての問題間違えちゃったので備忘録。 特徴 S3のストレージクラスの耐久性はすべて99.999999999%(イレブン・ナイン)で、オブジェクトは即時に取り出すことが可能です。 また、StandardとOneZoneのそれぞれの特徴については以下のとおりです。 Standard 複数のAZにデータを複製する 可用性高(99.99%) 高頻度アクセス向き Standard-IA 複数のAZにデータを複製する 可用性高(99.99%) 低頻度アクセス向き OneZoneより重要なマスタデータの保存に向いている OneZone 一つのAZにデータを保存 Standardに比べて低コスト 可用性はStandardより下(99.5%) 低頻度アクセス向き 重要度の低いログデータなどの保存に最適 重要度の低いデータで、即時に取り出す必要があるデータはOneZoneということになります。 (Standard−IAはどういうデータを保存するのが最適か結構難しいけど、重要なデータでかつコストは抑えたいみたいなケースには向いているのかな?)

2023年7月7日 · にあえん

オンライントランザクション処理(OLTP)?

SAAの問題に「オンライントランザクション処理(OnLine Transaction Process)」という用語が出てきたので調べてみました。 トランザクションとは トランザクションは「取引」という意味ですが、コンピュータ用語としては「一連の処理」という意味で使われます。 例えばユーザー登録処理の場合、概ね以下のようなシーケンスで登録が行われます。 この一連の流れは、アクセスに比例して増えていきます。そうするとこのシーケンス自体の管理も難しくなってきます。 この一連の流れを維持するために必要な処理がトランザクション処理です。 OLTPの「オンライン」の意味 単純に「リアルタイム性が求められる処理ならオンラインと付く」と覚えればいいと思います。 逆にリアルタイム性のないトランザクション処理というのは、ユーザー登録しても登録情報の反映が翌日にされるようなケースのことを指します。 参考 OLTPとは オンライントランザクション処理(OLTP) とは

2023年7月7日 · にあえん

Route53とCloudFrontのざっくりした使い分け

SAAの問題を解いている際に、以下のようなケースの問題が出てきたので備忘録として書き残します。 「オンプレミスサーバーが一つしかなく、海外に事業を展開するケースで、どのサービスを選択するのがよいか?」といった趣旨の問題です。 ここで安易に「Route53の位置ルーティングを使えばいいんじゃない?」と思っていたのですが、サーバーは一つしかないのでCloudFront使ってエッジロケーションで処理するのが効率的ということで正解となっていました。 簡易的に特徴をまとめてみました。 特徴 以下のような特徴があります。 Route53 サーバーに対するルーティングを行う キャッシュの蓄積は行わない 位置情報や加重に基づいたルーティングを行うことができる CloudFront サーバーに対するルーティングを行う キャッシュを蓄積する アクセスに基づいたエッジロケーションにルーティングする まとめ Route53だけではうまくキャッシュ処理ができないので、使い分けが大事だよね。

2023年7月7日 · にあえん

S3から手動でクロスリージョンレプリケーションを行う

クロスリージョンレプケーションはマネジメントコンソールからは実施できませんが、AWS CLIからは実行可能です。 aws s3 cp s3://(レプリケーション元バケット名) s3://(レプリケーション先バケット名) --recursive シンプルにcpコマンドを使うだけでできます。 参考

2023年7月7日 · にあえん