RESTについてまとめてみた!!

はじめに

今回はRESTについて学習したのでまとめていきます!!

RESTについて

そもそもRESTとは、webシステムを相互につなぐための設計思想のことです。

これは「REpresentational State Transfer」の略で、
直訳すると「具象的な状態の転送」となります。
少し意訳すると、リソースの「状態」を「明確」にして「転送」するということになります。

そしてREST原則として、次の6つに分けてルールが定められています。

  • クライアント/サーバー
  • ステートレス
  • キャッシュ制御
  • 統一インターフェース
  • 階層化システム
  • コードオンデマンド

詳しく説明していきます!

クライアント/サーバー

クライアントとサーバーを分離する考え方です。
クライアントはwebサイトを表示している端末のPCやスマートフォン
サーバーはwebサイトを提供しているコンピュータになります。

ステートレス

statelessを意訳すると状態を保存しないという意味になります。
サーバー・クライアント間で状態(ログイン状態)を保存しないため、
安全かつサーバーに依存せずにやり取りすることが出来ます。

キャッシュ制御

クライアントにキャッシュさせることが出来るルールです。
通信料が減り、速度や拡張性の向上が期待できます。

統一インターフェース

リソースの操作を統一するというルールです。

階層化システム

各システムをコンポーネントとして階層ごとに分離することを言います。
分離することで処理が遅くなるという弊害もあります。

コードオンデマンド

コードをクライアントに渡し、処理を実行することが出来ます。
サーバーでの処理ではなくなるので負荷を減らすことが出来ます。


以上の6つのルールを遵守して設計されたAPIを「REST API」と言います。
さらにかみ砕くと、

REST APIとは、webシステム間のやり取りを標準化した接続方法

と言えそうです。

URI、HTTPメソッドを定義してみる

movieをリソースとしてCRUD操作を定義すると次のようになります。

URI HTTP method
/movies POST
/movies/hoge GET
/movies/hoge PUT
/movies/hoge DELETE

まとめ

今回はRESTについてまとめてみました。
設計思想があるおかげで実際に作成するときの指針になって便利だと感じました。

達人に学ぶDB設計徹底指南書を読んで

はじめに

今回は「達人に学ぶDB設計徹底指南書」を読んだので 学んだことをまとめていこうと思います。

良かったところ

先日読了したSQL本の延長線の内容にあたるもので、理解が難しかった内容が詳しく説明されていました。
図を用いた解説も多く、初めての内容も理解できました。 また、最初に大枠を説明して詳細に移っていく流れがきれいで読みやすかったです。

学んだこと

  • 第1章
  • 第2章
    • 論理設計と物理設計のステップ
    • ファイルの物理配置
  • 第3章
    • 正規化
      • スカラ値
      • 基本的に「1対多」になるように正規化を行う
  • 第4章
    • ER図の書き方
  • 第5章
    • 論理設計とパフォーマンスの関係
      • 正規化の次元を行うことでパフォーマンスが落ちるトレードオフの関係にある
  • 第6章
    • B-treeインデックスについて
      • カーディナリティ
  • 第7~8章
    • バッドノウハウ、グレーノウハウ
      • データ型は統一
      • 代理キーは主キー
    • データクレンジングの重要性
  • 第9章

難しかったこと

見慣れない用語が多く理解が大変でした。
また、正規化やER図の作成も不慣れで難しかったです。

まとめ

SQLの延長線にあるDBについて学習出来ました。
作成から更新、改修などの流れが理解できてよかったです。
理解できていない箇所があるので時間を見つけて再度読み直そうと思います。

スッキリわかるSQL入門を読んで

はじめに

「スッキリわかるSQL入門 第4版 ドリル256問付き! (スッキリわかる入門シリーズ) 」を読んだので、感想をまとめていきます。

良かったところ

SQLって何? それおいしいの??」というくらいわからないくらいの初心者ですが、SQLを少し理解出来ました。
本の中では初心者が登場し、会話形式で進んでいきます。
一緒に学習している気持ちになれるので良かったです。
また演習が沢山あり学んだ知識を定着させるのには満足でした。

学んだこと

SQL文の使い方について学習出来ました。
具体的には、SELECTをはじめとした4大命令や条件式、検索結果の加工、関数、グループ化、副問い合わせです。
データベースについても学習出来ました。

難しかったこと

SQL文の組み合わせである副問い合わせやテーブルの結合については理解出来ましたが、実際に書くのは難しかったです。
また、データベースについてですが全体的に難しかったです。特にテーブル設計の正規化が大変でした。

まとめ

とにかく内容の濃い本でした。
演習が多いおかげで理解が進みました。
まだ理解できていないところもたくさんあるので何度も読み返したいと思います。

Rubyでオプションを扱う'optparse'を使ったコードの書き方

はじめに

Rubyoptparseを用いるとコマンドからの実行時にオプションを指定することが出来ます。
今回はその使い方について紹介します。

optparseの使い方

流れは以下の様になります。
1. OptionParserオブジェクトを作成する。
2. optにオプションを使用するブロックを登録する。
3. opt.parse(ARGV)でコマンドラインを実際にparseする。

これを踏まえて実際にコードを書いてみましょう。
例として、指定したオプションの引数を出力するコードを書いていきます。

# ライブラリを読み込み
require 'optparse'
# 1.オブジェクト作成
opt = OptionParser.new
# 2.optにオブジェクト登録 今回は`-m`とする
opt.on('-m') { |v| v }
# 3.ブロックの戻り値がARGVに渡される
opt.parse!(ARGV)

# ARGVを出力
p ARGV


このファイルをuse_optparse.rbとして保存して実行してみます。
すると以下の様な結果になるはずです。

# ruby use_optparse.rb -m 15
["15"]

しっかりと-mオプションの引数が出力されています。

まとめ

今回はoptparseの使い方についてまとめました。
これを用いるとプログラムの実行結果に幅を持たせることができます。
よろしければ使ってみてください。

参考URL

library optparse (Ruby 3.3 リファレンスマニュアル)

"プロを目指すためのRuby入門"を読んで

はじめに

今回はチェリー本こと、"プロを目指すためのRuby入門"を読んだ感想をまとめていこうと思います。

感想

良かったところ

他で学習した内容よりもさらに深堀りして説明されており、理解できた点が多くありました。
本で説明しきれないものについては参考サイトなどを紹介されており助かりました。
また、コラム欄では検索してもなかなか見つからなさそうな内容ばかりでためになりました。

学んだこと

rubyの基礎はもちろんのこと、ハッシュやシンボル、クラス、デバッグ技法など演習を通して学習出来ました。
またテストコードを書いてから作りたいものを作るテスト駆動開発は興味深いものでした。
正規表現についても筆者のまとめサイトのおかげで読めるようになりました。

難しかったこと

全て難しかったですが、いくつか挙げるとすればクラスやモジュールです。
オブジェクト指向プログラミングと言えばの内容ですが奥が深くて理解が大変でした。

まとめ

新しく学ぶことが多く到底一周しただけでは理解が追い付きませんでした。
そのため何度も読み返し、コードを書いて学習していこうと思います。
また参考書籍やサイトなども記載がありましたので、気になったものはどんどん手を付けていこうと思います。

Webアプリをdocker化する方法とは?

はじめに

開発したwebアプリをdocker化することで他者と手軽に実行環境を共有できます。
今回はその方法を解説していきます。

使用技術

手順

  1. Dockerfile / docker-compose.ymlを作成
  2. config/database.ymlを編集
  3. コンテナを作成、起動
  4. データベースを作成、型を作成
  5. 動作確認

1. Dockerfile / docker-compose.ymlを作成

Railsアプリ直下にDockerfile、docker-compose.ymlを作成します。
DockerfileはDocker imageの設計図であり、拡張子がないテキストファイルです。
以下の様に記載します。

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs && mkdir /myapp
WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp/
RUN bundle install
COPY . /myapp

上から順に説明します。
1. DockerfileはFROMから始めます。 そして元となるimage名を記載します。
今回はruby:3.2.2を指定しています。

2. RUNコマンドでコンテナを作成し、起動します。
そしてapt-get update -qqコマンドで最新のパッケージリストを取得します。
-qqとすることでログを表示させないようにしています。

&& apt-get install -y build-essential libpq-dev nodejs
先ほど取得したリストからbuild-essentiallibpq-devnodejsをインストールします。ダウンロード中のyes/noの回答として-yを指定してyesとします。

&& mkdir /myappにてmyappディレクトリを作成します。

3. WORKDIR /myappLinuxコマンドで表すとcd /myappであり、コンテナ内で行われます。

4. COPY Gemfile Gemfile.lock /myapp/ではGemfileとGemfile.lockをmyappディレクトリ直下にコピーします。

5. bundle installではGemfileを元にgemをインストールします。

6. 最後にCOPY . /myappにてRailsアプリのディレクトリを/myappにコピーします。

続いてdocker-compose.ymlを編集します。

version: '3'
services:
  db:
    image: postgres:12
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
    volumes:
     - db-data:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/rails-docker
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
    ports:
      - "3000:3000"
    depends_on:
      - db

volumes:
  db-data:

こちらも上から順に解説していきます。

services

コンテナを定義します。
今回はdbwebの2つのコンテナを作成します。

image

docker imageを指定しています。
今回はpostgres:12を使用します。

environment

環境変数を設定します。
今回はPOSTGRES_USER,POSTGRES_PASSWORD共にpostgresを指定しています。後ほど環境変数を読み込む箇所を説明します。

volumes

コンテナ外にデータを保存する方法を指定します。
dbは名前付きボリュームを作成して保存する方法で行います。
はじめに最終行で名前付きボリュームを作成します。

volumes:
  db-data:

そしてボリューム名:保存したいデータの場所を指定します。
今回は使用しているpostgresの保存先を指定しています。

db-data:/var/lib/postgresql/data


webではローカルのディレクトリにマウントさせる方法で行います。
今回はカレントディレクトリをコンテナ内のrails-dockerにマウントします。

volumes:
      - .:/rails-docker

build

作成したDockerfileを元にimageを作成します。

build: .

command

デフォルトで実行されるコマンドを指定します。 bundle exec rails sにてコンテナ内でrails serverを起動します。
-p 3000 -b '0.0.0.0'にてポート番号3000を指定し、バインドオプションを指定し0.0.0.0とします。
こうすることでIPアドレスを問わずにアクセス可能になります。

depends on

コンテナの起動順を指定します。
今回はdbwebの順に起動するようにします。

depends_on:
      - db

2. config/database.ymlを編集

デフォルトのものに追記していきます。

  default: &default
    adapter: postgresql
    encoding: unicode
+  host: db
+  username: <%= ENV.fetch("POSTGRES_USER") %>
+  password: <%= ENV.fetch("POSTGRES_PASSWORD") %>
    # For details on connection pooling, see Rails configuration guide
    # https://guides.rubyonrails.org/configuring.html#database-pooling
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

host:[サービス名]と入力します。
今回はdbですね。
そしてusernamepasswordにはdocker-composeの環境変数として設定した値を使用しています。

3. コンテナを作成、起動

docker-compose up -dにてdocker-compose.ymlに記載したものを作成、起動します。

4. データベースを作成、設定

  • データベースを作成します。
docker-compose exec run web rails db:create
  • database.ymlに基づいてデータベースを設定します。
docker-compose exec run web rails db:migrate

5. 動作確認

http://localhost:3000/にアクセスできるか確認します。

最後に

今回はwebアプリをdocker化する方法についてまとめてみました。
少し設定が大変でしたが今後はコンテナを起動してすぐに環境構築できます。
皆さんも試してみてください。

参考URL

Github Pagesを使用してwebページを公開しよう!

はじめに

今回はGithub Pagesを使用して製作したwebページを公開する手順を解説していきます!

公開までの流れ

  1. Githubにログイン
    アカウント作成がまだの方は作成してみてください。
    無料で作成できます。

  2. リポジトリの作成Ⅰ
    リポジトリとはファイルの保管場所を指します。
    画像の手順でリポジトリの作成画面に移行します。

    リポジトリ作成Ⅰ
    リポジトリ作成Ⅰ

  3. リポジトリの作成Ⅱ
    画面遷移したらRepository nameを入力します。
    (今回は"resume"としています。)
    その下にてPublicを選択します。
    下までスクロールして"create repository"を押します。
    (遷移後のページは後ほど使用するため消さないでください。)

    リポジトリ作成Ⅱ
    リポジトリ作成Ⅱ

  4. Gitを使用してファイルをGithubにpush
    続いてローカル環境でのお話しになります。
    ターミナルを使用して作成したhtmlやcssなどのファイルがあるディレクトリに移動して以下の一連の流れを行います。
    ※ htmlはgit initするディレクトリ直下に格納してください。
    webページアクセス時にひと手間必要になります。

    git initgit add *git commit
    git remote add origin 追加したいリポジトリ名
    git push -u origin main
    ※ 追加したいリポジトリ名には3で残しておいた画面上部の部分をコピーして使用します。

    Gitにリモートリポジトリを登録
    Gitにリモートリポジトリを登録


  5. Githubでpushした内容を確認
    3で残しておいたページをリロードします。
    下記のような画面に変わればこれまでの工程は完ぺきです!

    リポジトリの状態
    リポジトリの状態


  6. webページ公開設定Ⅰ
    下記画像のように"Settings" → "Pages"の順に押します。

    webページ公開設定Ⅰ
    webページ公開設定Ⅰ


  7. webページ公開設定 Ⅱ
    遷移した画面で Build and deployment の Branch を"main"に変更し、"save"を押します。

    webページ公開設定Ⅱ
    webページ公開設定Ⅱ

  8. 公開されたwebページを確認
    同ページをリロードするとURLが表示されるのでアクセスして確認します。
    ※アクセスした際にページがうまく表示されない場合にはhtmlファイルがリポジトリ直下にない可能性があります。
    ファイルの場所を移動するか、パスを直接入力することで表示できます。

まとめ

今回はwebページの公開方法についてまとめてみました。
商用利用等は規約違反になる可能性がありますので気になる方はチェックしてみてください。

参考URL