Kaigi on Rails 2024に参加してみた〜事前イベント編〜
※本記事はKaigi on Rails2024の当日までに執筆したものです。 みなさん、こんにちは小林です。 いきなりですが、Kaigi on Railsというイベントをご存知ですか?「初学者から上級者までが楽しめるWeb系の技術カンファレンス」というコンセプトで開催されているイベントになります。 実はこれまでに参加したことがなかったのですが、今年は機会に恵まれ、参加してみることにしました。 しかし、社内にも参加したことがある方がいなかったので、どのようなイベントなのかがわからず、少し不安も感じていました。そんな折にちょうど良い事前イベントを見つけたので、まずはそちらに参加してみました。 https://andpad.connpass.com/event/332751/ こちらはアンドパッド様とAsakusa.rb様の主催でタイムテーブルを解説してくださるイベントでした。運営の方々がスピーカーとして各セッションの見どころ等の解説と、どのようにスピーカーを選定したのかという小話があり、とても面白かったです。 選定は運営の方々で応募があった内容を点数化し、議論して決めるとのことでした。その中でも特に採用したいものは、採用したい人が他のメンバーに熱く語って説得させるというもので、かなり熱がこもったイベントだなと感じました。 個人的に一番ためになったのは、「有明近辺に詳しくない人向けの歩き方ガイド(仮)」でした。これがなければ当日迷子になっていたかもしれません(笑)。 実はこのイベントはKaigi on Railsの公式ホームページに掲載されていました。公式がこのようなイベントを紹介してくれるのは、初参加の人たちにはとてもありがたいことです!! あとはどのセッションに参加するかを決めて、当日に臨むだけとなります。次回は参加した感想をまとめますので、そちらもご期待ください。
Kaigi on Railsに参加しました! 〜2年目エンジニアの視点から〜
こんにちは、山屋です! 先日、Kaigi on Railsに参加しました。 特に印象に残った講演や、エンジニア2年目という段階で参加してみての感想について書こうと思います。 印象に残った講演 Railsの仕組みを理解してモデルを上手に育てる - モデルを見つける、モデルを分割する良いタイミング - https://speakerdeck.com/igaiga/kaigionrails2024 以前チーム内でリファクタリングや設計をする機会があった際に苦戦したので、設計力をつけたいなと思って参加しました。 モデルを分割する良いタイミングとして、「validatesメソッドに条件分岐が発生したとき」というのは分かりやすいな〜と思いました。 このまま進めるとだんだんしんどくなってしまうそうです。(たくさんご経験されたんだろうな…と想像してしまいました) あと繰り返し仰っていたのは「RailsにService層を入れるのはできるだけやめてほしい」ということです。 層が決まっているのはRailsのメリットであり、増やしてしまうとチーム内での理解や認識がバラバラになってしまいがちとのことです。 (基調講演でも抽象を追加する際には層を増やすのではなくアーキテクチャのどこかしらの層に入れましょうと仰っていましたね) つまりRails wayに乗りましょう。 Identifying User Identity https://speakerdeck.com/moro/identifying-user-idenity Userモデルは主キーid以外必要ないのでは?「ユーザーが存在している」ということだけ分かれば良いのでは?というお話でした。 idさえあればUser関連のほとんどの操作や分析はできるしユーザー名やメールアドレスなどは別のテーブルに分ければ扱いやすくなる、とのことで、……なるほど!と膝を打ちました。 まだ業務でその機会があるかは分かりませんが、何か大きな機能を追加するときに「存在していること」だけを表すモデルを作るアプローチはアリかなと思いました。 ワークショップ: Rackを理解しRailsアプリケーション開発の足腰を鍛えよう Rackワークショップに参加しました! こちらについては長くなりそうなので、また別記事に記載しようと思います。 面白かったです! エンジニア2年目で参加してみてどうだったか 正直な感想として、「思ったより理解できたな」と感じました。 興味のある講演を選んで聞いていたというのもありますが、スピーカーの方が伝えたいことはおおむね理解できたのではないかと思っています。 スクールに通っていた頃にオンラインで見ていたRuby Kaigiや1年ほど前に参加したRubyWorld Conferenceは、お恥ずかしながらあまりわからなかった…という感想でした。 しかし今回のKaigi on Railsは業務で実際に経験した場面についての内容も多く、全体的に理解度が上がったなという感覚がありました。 スピーカーの方の経験を聞いて業務に活かせることはないかと考えたり、講演を通して新しく知った技術について深掘りしてみたいなと思ったり、純粋に面白かったです。 難しそうだしまだ参加するのは早いかな…と最初は思っていたのですが、参加して良かったです。 今後は積極的にイベントに参加してみようと思えた良い経験でした! イベント全体を通しての感想 今回のイベントで最も印象に残った言葉は「Rails wayに乗る」でした。 基調講演だけでなく多くの講演でこの言葉が使われていました。 Rails wayを楽しく歩いていくこと、それがRailsを使っての開発における最適解なんだなということが強く印象に残りました。 まだRails wayをしっかり理解できていないのでRails wayを知るところから進めていこうと思います。これが私のKaigi on Railsの宿題です。 最後になりましたが、スピーカーの皆様、スタッフの皆様、素敵なイベントをありがとうございました! 最後までお読みいただきありがとうございました。
TryHackMeでハッキング入門してみた
初めまして!昨年の10月に入社しました山屋と申します。 ご挨拶が遅くなりましたが、これからよろしくお願いいたします。 今回はセキュリティ初学者がサイバーセキュリティ学習サイトのTryHackMeを利用したので、その紹介をさせていただこうかと思います。 TryHackMeとは? サイバーセキュリティやハッキングについて学べるwebサイトです。 https://tryhackme.com/ その名の通り、テスト環境で実際にハッキングしながらサイバーセキュリティの学習ができるというのが特徴です。 学習者のコミュニティがあったり、利用日数に応じて特典がもらえるというゲーム的要素があったりと、飽きさせない工夫がされています。 無料で利用できますが、一部有料版限定の学習コンテンツなどがあります。金額は2024年9月現在では14ドル/月です。 学べること 以下のようなことが学べますが、まだまだたくさんあります! サイバーセキュリティ Linux ネットワーク OS サイバーディフェンス ハッキング手法 ハッキングツールの使い方 学習の流れ 何から学べば良いのか?となった場合でも、登録時にアンケートに答えるとおすすめのコース(Learning path)を表示してくれるので心配はいりません。例えば、画像のようなLearning pathが用意されています。 Learning path内にはRoomというものが用意されています。Roomでは説明を読み、ときにはブラウザ上のマシンを動かしながら問題演習ができます。このRoomをクリアしていくという流れです。 例えばこのようなRoomがあります。 https://tryhackme.com/r/room/howwebsiteswork 実際に学んでみての感想 良かったところ 実際に手を動かして学習できる これが一番良かったことかなと思います。 特に実際にハッキングできたのは楽しかったです。(言うまでもないことだと思いますが、他のサイトに対して行なったら犯罪です!) 脆弱性のあるportを発見して侵入し、管理者権限を入手する…といった一連の流れを体験できます。 ゲーム感覚で楽しく学習できるのが推しポイントですね。 環境構築不要 ブラウザ上でマシンを起動してハッキングが行えるので、自分で環境を用意する必要はありません。お手軽ですね。 もちろんVPNを使って自分のマシンから学習を進めることもできます。 分かりやすく、網羅的に学べる アニメーションなどを使って、インタラクティブに学ぶこともできます。 例えばどういった流れで通信が行われているのか、というのをアニメーションで学ぶことができたのでわかりやすかったです。ネットワーク機器の有無で通信がどう変わるのか?というのを見ることができます。 また個人的な話になりますが、私は今応用情報技術者試験の学習をしています。 勉強していると、「これTryHackMeでやったところだ!」となることがよくあります。(例えばOSI参照モデルやネットワーク構成、TCP/IPなどですね)これらが実際にどのように使われているかということを知った状態で学ぶことができるのは大きなメリットだと感じました。 Learning pathに沿って学んでいけばサイバーセキュリティに関する知識を得ることができると思います。セキュリティそのものだけではなく、ネットワーク等の知識も基礎から網羅的に学べるので、一番勉強になったと感じました。 気になるところ 英語のみである 英語が苦手な人だと苦戦するかもしれません。(私は英語があまり得意ではないので大変でした…) 場合によっては自動翻訳を使うことも検討した方が良いと思います。 マシンが遅い ブラウザで使えるマシンの動作が遅いことが気になりました。 私は試しませんでしたが、自分のマシンを使って学習を進めることもできるので、そちらで解消できるかもしれません。 無料版だと学べることが限られる 2024年9月現在では853個のRoomがあり、そのうち無料のRoomは約555個でした。(個数が間違っていたらすみません!) 学習初期におすすめされたごく基礎的なLearning path内にも有料のRoomは含まれていて、しっかり学習するには有料版の方が良いかもしれません。 私は2ヶ月ほど有料版に登録していましたが、基礎的な部分を深掘りできたので個人的にはお金を払う価値はあったかなと思います。ただ、無料会員に戻ると自分が過去に学んだ有料限定のRoomは見れなくなる点には注意が必要です。 まとめ TryHackMeで学習した感想などを書かせていただきました。サイバーセキュリティに関連することを基礎から学ぶことができ、非常に学習の助けとなりました。もし興味がありましたら、無料版からぜひ始めてみてください! 最後までお読みいただきありがとうございました。
Macの環境構築用のシェルスクリプトを作成しました
こんにちは! 冨田です。 久しぶりに英語学習を再開しようと思い、現状のレベルを測るために、初めてTOEICを受けてきました! TOEICには合格・不合格といった基準はないので、内心ホッとしていますが、点数を高くできるように勉強していこうと思います! 概要 今回は、初期状態のMacで開発環境を迅速に構築するためのスクリプト「auto_setup_dev」を作成してみました。 新しいMacが手元に届いたら、必ず必要になる開発環境のセットアップ。しかし、日頃行う作業でもないため、何をしていたか忘れてしまいがちです。 忘れてしまうのであれば、GitHubに環境構築用のシェルスクリプトを用意しておけばいいのではと思い、作成してみました! 作成 こちらが、作成したファイルとなります。 必要な項目ごとに、シェルスクリプトを分けて作成しました。 prezto_set_up.sh homebrew_install.sh install_brew_packages.sh envs_set_up.sh peco_set_up.sh install_latest_versions.sh prezto_set_up まずは、ターミナルの環境を見やすくするためのpreztoをインストールするシェルスクリプト。 preztoの公式は、こちらです。 zshのフレームワークで、CLI環境をリッチにしてくれます。(プロンプトテーマ、自動補完、etc) homebrew_install, install_brew_packages HomebrewのインストールとHomebrewから必要なアプリケーションをインストールするためのシェルスクリプト。 今回、Homebrew経由で色々なアプリケーションをインストールできることを知ったので、まとめてインストールできるように作成してみました! Homebrew経由でパッケージとアプリをインストールできます。 皆さんも、一つひとつをインストールするのが面倒だなと思ったら、一括でHomebrewでインストールするのはいかがでしょうか? envs_set_up anyenvをインストールし、rbenvとnodenvをインストールしています。 開発環境でDockerを使うようになったので、必要なくなってきたような気もしますが、、、 念の為、作成しました! 最近は、asdf というバージョン管理ツールも出てきているそうなので、そちらに変更するか悩み中です。 peco_set_up ターミナル操作を速くするためのツールです pecoの公式は、こちらです。 コマンド操作が苦手で、コマンドを覚えられない私には、とても便利なツールなので、シェルスクリプトを作成してみました。 コマンド操作が苦手な人にはとてもおすすめなツールです! install_latest_versions RubyとNodeの最新版と、nodenv-yarn-install(yarnを自動的にインストールするプラグイン)を インストールしています。 開発環境によってバージョン指定は異なると思いますが、最新版を入れておくためのシェルスクリプトを作成しました。 今回、nodenv-yarn-installというプラグインを見つけたので、そちらもいれてみました! まとめ 初回環境構築を簡単にするためのシェルスクリプトを作成することで、Linuxの基礎知識の1つを学べることができました。 作成するのに時間がかかった割には、実行機会は少ないので残念ですが、、、 また、困ったことや閃いたことがあれば、作成していきたいと思います! 最後まで、お付き合いいただきありがとうございました。
GitHubで経歴書を作成してみた
こんにちは! 最近、仕事着に何を着るか迷うので、すべて作務衣にしようかと考えている冨田です。 エクセルやスプレッドシートを使用して作成する経歴書ですが、管理が面倒で毎回どこにいったか忘れがちです。(私だけかもですが…) GitHubで管理できたら、わかりやすいのでは?と思い、作成してみました。 概要 GitHubの機能を使用して、自身の経歴書を公開・PDF保存できるサービスを作成してみました。 作成したものは、以下になります。 リポジトリ Webサイト リポジトリは、GitHub PagesとGitHub Workflowsを用いており、 GitHubリポジトリに格納されているファイルをそのままWebサイトとして公開(GitHub Pages) 経歴書をPDF形式で保存(GitHub Workflows) ができるようになっています。 作成 基本的な流れは、GitHub Pagesサイトを作成するを見て作成できます。 ざっくりした流れは下記になります リポジトリの用意:github.ioドメイン、もしくは独自ドメインを使用。 サイト用ファイルの作成:HTMLもしくはMarkdownファイルを作成。 リポジトリの設定:GitHubリポジトリの設定から、デプロイするファイルを指定します。 サイト用ファイルの作成 以下のようにHTMLファイルを作成していきました <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>職務経歴書 冨田久樹</title> <link rel="stylesheet" href="css/index.css" /> </head> <body> <div class="container"> <div class="title"> <h1>職務経歴書</h1> </div> <div class="profile-content"> <h2>プロフィール</h2> <div class="profile"> <div class="info"> <h3>基本情報</h3> GitHub Actionsを使用したPDF保存 PDF保存には以下のツールを使用しました: puppeteer:HTMLからPDFに変換するためのライブラリ。 fonts-ipafont-gothic:日本語フォントに対応するため。 cheerio:PDFのファイル名をサイトタイトルに対応させるため。 以下は、GitHub Actionsのworkflowの一部です: name: Convert HTML to PDF on: push: branches: - main workflow_dispatch: jobs: convert: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 # PDFファイル保存するための処理を記載 - name: Upload PDF uses: actions/upload-artifact@v4 with: name: ${{ env.PDF_TITLE }} path: ${{ env.PDF_TITLE }}.pdf GitHub Actionsを使用して、好きなときにPDFを保存できるようにしました。 苦労したポイント 特に苦労したのは、サイトタイトルをPDFファイル名に指定する部分と、HTMLをPDFに変換する部分です。使い方がわからず、悪戦苦闘しましたが、以下のように解決しました: サイトタイトルの抽出:cheerioを使用してHTMLからタイトルを抽出し、環境変数として保存。 HTMLからPDFへの変換:puppeteerを使用して、指定したHTMLファイルをPDFに変換。 - name: Extract Title id: extract run: | TITLE=$( node -e " const fs = require('fs'); const cheerio = require('cheerio'); const html = fs.readFileSync('${{ github.workspace }}/index.html', 'utf-8'); const $ = cheerio.load(html); const titleHtml = $.html('head title'); const titleText = cheerio.load(titleHtml)('title').text(); console.log(titleText.replace(/ /g, '_')); ") echo "PDF_TITLE=${TITLE}" >> $GITHUB_ENV - name: Convert HTML to PDF run: | node -e " const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('file://${{ github.workspace }}/index.html', {waitUntil: 'networkidle2'}); await page.pdf({path: '${{ env.PDF_TITLE }}.pdf', format: 'A4'}); await browser.close(); })(); " まとめ 今回、GitHubの機能をつかうことで、簡単にサイト公開やPDF保存機能を作ることができるようになりました! また新しいことを思いついたら、作ってみたいと思います。 最後まで、お付き合いいただきありがとうございました。


