『プロを目指す人のためのRuby入門』を読みました!

はじめに

『プロを目指す人のためのRuby入門』を読んだので、その感想をまとめていきたいと思います!

良かったところ

わかりやすい説明と実用的なコード例

Rubyの基本構文から、テストコードの作成、例外処理、正規表現、パターンマッチングなど、分かりやすい文章で説明されています。
ページ数が多いですが、その分相応に例も多く、実際に処理の作成をすることができ、より理解を深めることができます。

テストコードの重視

各章で解説されるプログラムは、テストコードが先に紹介される流れとなっています。
こちらの本を読んだ後、色々な機能をもつすこし複雑なプログラムを作成したのですが、このテストコードを作成してからというのがとても役に立ちました。

学んだこと

Rubyの基礎知識

こちらの本を読む前に、別の動画で基礎知識は学んでいました。
しかし、それ以上に詳細で、進んだ知識が説明されているため、それらを学ぶことができました。

テストコードの作成方法やその必要性

「良かったところ」でも触れましたが、テストコード作成方法やその必要性も学ぶことができ、実際にプログラムを作成するにあたって、実用的な知識を身につけることができました。

難しかったこと

全体的に説明が分かりやすく、ソースコード例も豊富なので、何もわからない……となることはなかったです。
しかしながら、yieldやProcなどの概念は、使いこなせるところまではまだ理解できていません。
こちらは何度か読み返し、実際に使用していくことで理解を深めたいところです!

まとめ

今後Rubyで開発をする際には、手元に置いて確認に使用したり、読み返したいと感じる本でした!

REST APIとは?

はじめに

RESTについて学んだので、まとめていきたいと思います。

WebAPIとは

Webサービスで提供している機能やデータを、外からプログラムが読み取りやすい形で利用できるように定めた、規約またはその実装のことです。

WebAPIが公開されることで、第三者がデータや機能を活用して新たな機能を開発することができます。
それにより、自サービスの関連サービスが増え、自サービスをより発展させることができます。

RESTfulとは

RESTで求められる原則に従っていることを、RESTfulといいます。

RESTとは

RESTとは、Representational State Transferの頭文字をとったもので、日本語にすると「分散型システムにおける設計原則群」となります。
RESTの設計の原則として6つ守るべきとされている原則があります。

  • クライアント/サーバー
    • システムが役割によって分かれており、クライアントはリソースを要求し、サーバはそれを提供する役割を担う
  • 階層化システム
    • システムは複数の層で構成される
    • 各層は独立して、拡張が可能である
  • コードオンデマンド
    • サーバーからクライアントにコードを送り、クライアント側で実行することができる
  • 統一インターフェース
    • システム全体で一貫したインターフェース(URIやHTTPメソッドなど)を持つことで、操作を容易にする
  • ステートレス
    • 各リクエストは独立し、過去のリクエストや次のリクエストに依存しない
  • キャッシュ制御
    • レスポンスがキャッシュ可能かどうかを明示する
      • 明示することで効率とスケーラビリティが向上する

REST APIとは

上記をふまえ、REST APIとは、RESTfulなWebAPIのことを示します。
RESTで求められる原則に従う、規約または実装となります。

REST API成熟度モデルというものがあり、これはREST API設計レベルを定めています。
REST API設計レベルとはどれだけRESTに準拠しているのかを示しています。

REST APIのデータ操作

REST APIでは、GET等のリクエストでデータを操作します。

movieをリソースとして、基本的なCRUD操作を行うURI、HTTPメソッドを定義してみます。
前提として、対象データを特定するユニークな値をidとします。

URI HTTP method 操作内容
/movies GET movieの一覧取得
/movies POST movieの新規登録
/movies/{id} GET 特定のmovie情報を取得
/movies/{id} PUT movie情報を更新
/movies/{id} DELETE movie情報を削除

おわりに

WebAPIを設計する際は、REST APIとなる設計を心がけたいと思います!

参考

Rubyのoptparseライブラリの使い方

はじめに

Rubyを扱う機会があり、その際optparseというライブラリを使用したので、その使い方についてまとめます。

optparseとは

optparseとは、コマンドラインのオプションを取り扱うためのライブラリです。

例えばrubyで、sample.rbのプログラムがあるとします。
そのプログラムをコマンドラインで実行する際、-a {valueA} -b {valueB}のような形で、オプションとその引数値を取り扱いたい場合に使用するライブラリです。

optparseの基本的な使い方

下記は、optparseの基本的な使い方の流れです。

  1. OptionParserオブジェクトを作成する
  2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する
  3. コマンドラインをparseする

ソースコード

sample.rbのプログラムで、-aと-bのオプションを受け付けるコマンドを作成する例を示します。

require 'optparse'

opt = OptionParser.new # 1. OptionParserオブジェクトを作成する

opt.on('-a') {|v| p v } # 2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する
opt.on('-b') {|v| p v } # 2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する

opt.parse!(ARGV) # 3. コマンドラインをparseする
p ARGV

実行結果

$ ruby sample.rb -a valuA -b valueB
true 
true
["valuA", "valueB"]

OptionParser#onメソッドの引数でオプションを定義し、引数が指定された時の処理をブロックで記述します。
このとき、ブロックの引数にはオプションが指定されたとして、trueが渡されます。

OptionParser#parse!メソッドにより、コマンドライン(ARGV)の解析を行います。
ARGVRubyスクリプトに与えられた引数を表す配列です。

OptionParser#parse!メソッドでは、ARGVからオプション(ex: -a、-b`)が取り除かれます。

オプションに指定された値を受け付ける

OptionParser#onメソッドのオプション定義で末尾に任意の記述をすると、そのオプションは引数を受け付けることを指定します。

ソースコード

require 'optparse'

opt = OptionParser.new

opt.on('-a VAL') {|v| p v } # VALを追加
opt.on('-b') {|v| p v }

opt.parse!(ARGV)
p ARGV

実行結果

$ ruby sample.rb -a valuA -b valueB
"valuA"
true
["valueB"]

もし、オプションの引数を必須としたくない場合は、任意の記述に[]を付加します。

require 'optparse'
opt = OptionParser.new

opt.on('-a [VAL]') {|v| p v } # VALを追加
opt.on('-b') {|v| p v }

opt.parse!(ARGV)
p ARGV

オプションの引数をハッシュに格納

受け付けたオプションの引数値を、ハッシュに格納して、以降の処理でも使用できるようにするには、下記のように記述をします。

require 'optparse'

params = {}
opt = OptionParser.new

opt.on('-a [VAL]') {|v| params[:a] = v } 
opt.on('-b [VAL]') {|v| params[:b] = v }

opt.parse!(ARGV)
p ARGV
p params

上記の実行結果は下記となります。

$ ruby sample.rb -a valuA -b valueB
[]
{:a=>"valuA", :b=>"valueB"} // <= paramsにオプションの引数値が格納されたので、以降の処理で利用可能

OptionParser#parse!メソッドについて

ソースコード例を実行していく中で、opt.parse!(ARGV)の記述をうっかりと消してしまって、paramsハッシュに値が格納できないことがありました。

opt.parse!(ARGV)メソッドはコマンドライン引数(ARGV配列)を解析し、選択したオプションに応じて、対応するブロックを実行します。
このメソッドが呼び出されない限り、オプションの解析が行われず、paramsハッシュに値が格納されないので注意が必要です。

まとめ

今回必要となった使用方法を中心に、optparseライブラリの使い方をまとめました。 参考になれば幸いです!

参考

ReactアプリをGitHub Pagesで公開する方法

ここしばらくReactの勉強をしており、その際に作成したReactアプリをGitHub Pagesで公開をしてみました。 その公開までの方法をまとめていきたいと思います。

1. GitHubリポジトリを作成

まず、公開したいReactアプリを格納するGitHubリポジトリを作成します。
このとき、リポジトリは「public」(公開)としてください。

2. パッケージのインストール

gh-pagesというnpmパッケージをインストールします。
gh-pagesは、ReactアプリをGitHub Pagesにデプロイするために必要なパッケージです。

公開するReactアプリのpakage.jsonが存在するフォルダ下で、下記のコマンドを実行します。

npm install gh-pages --save-dev

3. package.jsonの編集

公開するReactアプリの、package.jsonファイルにフィールドを追加します。

homepageフィールドの追加

"homepage": "https://[リポジトリを作成したGitHubのユーザー名].github.io/[作成したリポジトリ名]/"

scriptsフィールドに追加

各種スクリプトを記述しているscriptsフィールドにデプロイ用のスクリプトを追加します。

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    // 下記を追加
    "predeploy": "npm run build",
    "deploy": "gh-pages -d build"
  },

4. deployスクリプトを利用してReactアプリのビルドとデプロイを実施

公開するReactアプリのpakage.jsonが存在するフォルダ下で、下記のコマンドを実行します。
コマンドを実行すると、Reactアプリのビルドとデプロイが行われます。

npm run deploy

実行が成功すると、Publishedと表示されます。

5. GitHubリポジトリの設定

デプロイが完了したら、作成したリポジトリgh-pagesブランチが作成されています。 このブランチを使用し、GitHub PagesでReactアプリが表示できるようにリポジトリの設定をします。

作成したGitHubリポジトリにアクセスして、"Settings" > "Pages"に移動します。

リポジトリ画面

Settings画面

"Source"Deploy from a branchとして、"Branch"gh-pagesブランチを選択して"Save"ボタンを押して設定します。

Pages画面

6. 公開されたReactアプリを確認

反映に少し時間がかかりますが、5の設定をしたあとしばらくしてから、3で設定したhomepageフィールドのURL(https://[リポジトリを作成したGitHubのユーザー名].github.io/[作成したリポジトリ名]/)に接続すると、Reactアプリが表示されます!

まとめ

以上がReactアプリをGitHub Pagesで公開する方法でした。

参考

2023/7/17~2023/7/23 週報

やったこと

勉強時間

5.0h

感想

  • 上級課題完了できてよかったです!
  • しかし、勉強時間は5時間とかなり少なめ……
    • 仕事が忙しかったり、仕事で気になっていることを調べる時間に当てたりと勉強の時間が確保できなかったのが理由ではありますが、時間捻出していかないと永遠にロードマップ終わらないのでどうにかしなければ……!
  • 反省の一週間でしたが、7/22にはミートアップに初参加しました!
    • 色々な話を聞けたの楽しかったです!
    • HCのロードマップをコツコツやれば絶対に力がつく&自分が望む内容で転職できると感じれたので絶対卒業するぞー!と気持ちを新たにしました
  • 次週も仕事が忙しいままですが、朝やスキマ時間を使って勉強時間を確保します!

次週の目標

  • React
    • 初級完了
    • 中級完了
  • 勉強時間
    • 15H以上は確保する

2023/7/10~2023/7/16 週報

やったこと

  • JavaScript
    • 動画講座視聴完了
    • 中級課題前完了

勉強時間

7.8h

感想

  • 上級課題の方が完了できませんでした……!
  • 仕事で夜の作業になったりすることや、就業後気になるところがあって調べていて勉強時間に割けませんでした
  • 他のHC受講生の方でがんがん進めている方を見るとめちゃくちゃ焦ってしまうので、業務は定時内に完結できるようにしたいところ(気になることの調査なども)
  • TodoListの提出課題ができたのは良かったです!

次週の目標

  • JavaScript
    • 上級課題完了
  • React
    • 初級完了

2023/7/3~2023/7/9 週報

やったこと

  • JavaScript
    • 課題途中まで
    • 動画講座途中まで

勉強時間

8.0h

感想

  • 平日は仕事で発生した問題に対応したため残業となり、一日勉強ができませんでした……
    • 不測の事態とはいえ、もう少し早くの対応ができたのでは?とか防げたものでは?とか考えてしまいます
    • それに加えて、仕事の内容がモヤモヤすることばかりでこのまま続けるのは嫌だなぁ……という気持ちが募っています
    • 抜け出すためにも力をつけたい→勉強をするしかない、ということなのでがんばりたいです
  • という気持ちになっていたのに、週末も時間を確保できませんでした
    • 予定があったとはいえ、1.5hだけしかできなかったのは怠慢です
    • 次週は、TwitterやHappinessChain内のSlackを利用して、時間確保していきます!!!
    • 勉強時間を増やす方法を考えたいところですが、今のところ具体的な案は出ていません……
    • 今の会社(仕事?)が嫌だなぁ……という気持ちはあれど、ものすごいその気持ちがあるわけでもないというのが、なぁなぁに時間を過ごしてしまう原因な気がします
      • →これからどうしていきたいのか、それをするためには何をしていくべきか、っていうところなどを明確にするべき

次週の目標

  • JavaScript
    • 課題、動画視聴共に完了
  • React