Hugo + GitHub Pagesで静的サイトを作る

Hugo + GitHub Pagesでポートフォリオっぽいサイトを作りました。

本記事では、サイト作成にあたりやったことについて書きます。

できたもの

f:id:nafuka11:20211009205136p:plain:h300

https://nafuka11.github.io/

github.com

技術選定

今までの経歴や作ったものをまとめたページが作れること(ブログ機能不要)、
メンテしやすくMarkdownで書けること、サイトのビルドが早いことという観点で選びました。

テーマをPaperModにした決め手は Changelog がきちんと書かれていて、変更が追いやすいことです。

Coder という別のテーマと悩んだのですが、変更が追いづらいため今回はPaperModにしました。
CoderはソーシャルアイコンにFont Awesomeのクラスを直接指定できるのがいいところだと思います。
ただ、デフォで日本語対応フォントではなかったり、Topページからメニューの各ページに移動するとタイトルがズレるのは気になるところです。

やったこと

Hugoを使ったことがなかったので、まずは公式のドキュメントを読みました。

Quick Start で大まかな使い方、Basic Usage でhugoコマンドの使い方、Directory Structureディレクトリ構成について学びました。

その後は、PaperModのWiki を見て、install手順に従った後、config.ymlを設定していきました。

PaperModのWikiにある Add menu to site を参考にconfig.ymlを編集し、hugo new menu名 してページを追加しました。

PaperModのCSSを調整

PaperModはライトテーマだと、Topページが背景色 #F5F5F5 なのですが、それ以外のページで #FFFFFF になります。

この問題はIssueが上げられましたが、製作者によると意図的なものだそうで、修正されずにcloseされています。

github.com

自分的に違和感があったため、CSSを調整しました。

CSSの設定方法はPaperModのWikiにある Bundling Custom css with theme's assets を参考にしました。

GitHub Actionsを使った自動デプロイ

Hugo公式の Host on GitHub にある Build Hugo With GitHub Action のワークフローをほぼそのまま使いました。

このワークフローは以下のことをしてくれます。

  • リポジトリをチェックアウト
  • Hugoをインストール
  • ./public にサイトを生成
  • ./public の内容をgh-pagesブランチにデプロイ

ワークフローを追加した当初、GitHubの障害が発生していてワークフロー動作しなくて焦りました。何かあった時に GitHub Status を見るのは大事だと思いました。

終わりに

静的サイトが作れてよかったです。

今後はサイトに内容を追加していきたいです。

42Tokyoでの2021年9月振り返り

この記事は、エンジニア養成機関 42Tokyo の活動を知ってもらうため、 9月に42Tokyoであったことを振り返る記事です。

自分が取り組んだカリキュラム、参加したイベント、コミット時間について振り返ります。

やったこと

C++98でコンテナクラスの再実装をする課題

8月からC++98でvector, map, stackなどのコンテナクラスを再実装する課題に取り組んでいます。

9月はmapの実装が完了しました。ここまでにかかった時間は約98時間(9月で54時間)です。

大変だったこと

mapは内部で平衡二分探索木を使っています。

8月の振り返り ではAVL木で実装すると書いていたのですが、赤黒木で実装することにしました。赤黒木だと課題クリア時にボーナスがもらえるためです。

赤黒木は場合分けが多く、理解するのが大変でした。AVL木の方が楽だと思います。

実装にあたり『アルゴリズムイントロダクション』の2色木の章が参考になりました。擬似コードが書かれていて理解しやすかったです。

ただ、それでも説明するのが大変そうなのでスライドを作りました。

Googleスライドのテンプレートはこちらを使わせていただきました。

note.com

ShellScriptのコードゴルフで1位を取りました

42Tokyoでは時々、短時間で生徒とコードの短さ・速さなどを競い合うイベントが開催されます。

9月はShellScriptのコードゴルフが2回開催され、内1回で1位を取りました。

内容は以下を1時間以内にできるだけ短いコードで実装するものでした。

1回目の問題はawkを使って解きました。

2回目の問題はbashだと難しくて解けなかったです。解いた方はRubyを使ったようでした。

数学本の輪読会を完走

6月から、週1回グループで集まって『人工知能プログラミングのための数学がわかる本』を読んでいました。

9月でついに本を読み終えました。

Chapter1から4までで数学のことを一通り学べたのが良かったと思います。一方で実践編の途中からはかなり難しく感じました。

この本を読んでいて、どちらかというと機械学習よりも統計の方が興味があるかも……と思ったので、10月からは 統計学の時間 | 統計WEB の輪読会に参加することにしました。

42Tokyoでは学生の成績などのデータを、APIを使って学生が入手できます。統計を学ぶことでデータの活用ができたらと思っています。

サイバーエージェント×42 Tokyo就活イベントに参加しました

9/9にZoomで行われたサイバーエージェント×42 Tokyo就活イベントに参加しました。

イベントレポートはnoteにまとめてあります。

note.42tokyo.jp

イベントに参加して、サイバーエジェントに内定が出た42Tokyo在籍の中野さんのように、アウトプットして外にチャレンジしていきたいと思いました。

植山類さんの講演に参加しました

9/25にYouTube Liveにて行われた植山類さんの講演に参加しました。

植山類さんはGoogle在籍時にLLVM lldリンカを作成された他、Cコンパイラ chibicc やハイパフォーマンスなリンカ mold を作られています。

講演のテーマは「リンカの基礎知識」について。

リンカの役割や実践的な知識、実行ファイルのロード方法などについて教えてくださいました。

詳細な内容は、りょうさんが記事にまとめられています。

ryo-manba.hatenablog.com

lld開発の苦労話(VisualStudioのドキュメントに書かれていない挙動を合わせるのが大変だった話)、関数を小分けにしてスタティックライブラリを作成する理由が特に面白かったです。

コミット時間

合計 1日平均
9月 151時間27分 5.0時間

今後やること

引き続きC++でコンテナクラスを再実装する課題に取り組みたいと思います。10月中には終わらせたいです。

10月からは与えられたコードをリファクタリングする課題が始まるので、そちらも取り組みたいと思います。

42Tokyoでの2021年8月振り返り

エンジニア養成機関、42Tokyo での活動について知ってもらうために、8月に42Tokyoであったことを振り返る記事です。

自分が取り組んでいるカリキュラム、行われているイベント、コミット時間について振り返ります。

カリキュラム

C++でコンテナクラスの再実装をする課題

概要

C++98でvector, map, stackなどのコンテナクラスを再実装する課題です。

それぞれのコンテナのイテレータや、C++11から実装されたstd::enable_if, std::is_integralなども実装する必要があります。

C++98なのにC++11のstd::enable_if, std::is_integralを実装するのは、コンテナクラスの関数の引数がfillなのかrangeなのか区別する必要があるからだと思っています。)

現在、vectorの実装が完了しました。ここまでにかかった時間は40時間ほどです。

学習方法

江添亮のC++入門vectorの実装について学び、

プログラミング言語C++ 第4版』を読んでSFINAE、std::enable_ifの実装について知り、

clang++やg++の標準ライブラリのソースを読みながらコンテナクラスの実装をしています。

感想

型に応じて別の型を取り出せるstd::enable_ifが面白いです。

今まで使っていたテンプレートとはまた違う面白さです。

イベント

数学本の輪読会(6月から継続中)

週1回グループで集まり、『人工知能プログラミングのための数学がわかる本』を読んでいます。

8月から複数分かれていたグループが集まって以前より人数が増えました。

内容はChapter5 実践編1をやっています。今まで学んだことの集大成という感じです。

この章からは Pythonのコードが公開 されているので、コードも読みながら進めています。

学んだことは以下のリポジトリにまとめるようにしました。

github.com

コードゴルフ的イベント

今回はプログラムの実行速度を問う問題でした。

その他勉強会

7月の記事 で紹介した勉強会に加え、nand2tetrisを作ってみる勉強会が生まれたようです。

コミット時間

合計 1日平均
8月 127時間39分 4.1時間

7月の記事 では、8月からコミット時間をもう少し増やしていきたいと話していたのですが、さらに少なくなってしまいました。

8月はワクチン接種の副作用で休みを取ったり、保険関係の申請をしていたりしたのが原因かなと思います。

今後やること

引き続きC++でコンテナクラスを再実装する課題に取り組みたいと思います。

42Tokyoでの2021年7月振り返り

42Tokyoで7月に行ったことの振り返りです。

やったこと

カリキュラム

C++の入門課題をクリア

C++の基本的な概念(クラス、例外、キャスト、コンテナ、イテレータなど)を課題を解きながら学んでいく課題です。

感想や工夫した点は 2021年5月の振り返り記事 を参照ください。

HackMDに書いた資料は最終的に5万字近くになりました。

課題をクリアするまでにかかった時間は、約102時間(課題81.9時間 + レビュー20.7時間)でした。

ネットワークの課題をクリア

概要

ネットワークに関するクイズのような課題です。

ネットワーク構成図が問題として与えられます。ネットワークを構成する機器のルーティングテーブルやIPアドレスを正しく設定し、ネットワーク通信できるようにします。問題は複数問あります。問題にはそれぞれレベルがあり、レベルが上がるほど難しい内容になっていきます。

調べた感じ、Ping-t の最強WEB問題集 CCNA (200-301)にあるサブネットの問題や、SubnettingPractice.com というサイトの問題に近いと思います。

この課題をクリアしたことで、ネットワークの設定を以前よりスムーズにできるようになるのではないかと思います。

勉強方法

勉強方法は、まず課題に出てきた単語をググったり、『マスタリングTCP/IP 入門編』を読んだりして知識を深めました。

その後、以下のサイトでサブネットマスクの計算方法を覚え、問題を解いていきました。

www.n-study.com

分からない時、詰まった時はすでにクリアした生徒から話を聞いたり、レビューを見学してやり方を学びました。

課題をクリアするまでにかかった時間は、約10時間(課題7.2時間 + レビュー2.7時間)でした。

イベント

数学本の輪読会(6月から継続中)

週1回4-5人のグループで集まり、『人工知能プログラミングのための数学がわかる本』を読んでいます。

現在は線形代数の章を読んでいます。

コミュニケーションイベント

生徒が主催したイベントです。コミュニケーションの促進、自分自身を見つめ直すきっかけになればと考え企画したそうです。

Zoomのブレイクアウトルームを使って、少人数でお互いのことについて話し合いました。

今回は、7月に入学した生徒たちとお話しました。

コードゴルフ的イベント

短時間で生徒とコードの短さ、速さなどを競い合うイベントです。

7月は3回開催されました。内2回はコードの短さを競い、1回はコードの処理速度を競いました。

その他勉強会

自分はあまり参加できていないのですが、最近は生徒主催で様々な勉強会が行われています。

コミット時間

合計 1日平均
7月 139時間50分 4.5時間

7月はVRChatを始めてしまったのもあり、42Tokyoへのコミット時間はかなり少なめでした。

8月からはもう少し増やしていきたいです。

今後やること

今後は、C++でコンテナクラスを再実装する課題に取り組みたいと思います。


変更履歴

2021/08/12 課題クリアまでにかかった時間を記載。