optparseとは?

optparseとは?

optparseはRubyの標準ライブラリの1つであり、コマンドラインのオプションを扱うためのライブラリです。 簡単に言うと、-a-bなどの好きなオプションを自分自身で作成することができるようになります。

オプションの設定・定義

オプションの作成例です。

require 'optparse'
opt = OptionParser.new

opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }

opt.parse!(ARGV)
p ARGV

まず。、optparseオブジェクトを生成(インスタンス化)を行い、OptionParser#onメソッドでオプションの設定、つまりどの文字をコマンドライン上で実行できるかの設定ができます。 上記の例では、-a-bをオプションに取ることができます。ブロック内にはオプションが指定できた場合にはtrueが渡されます。 OptionParser#parse! により、コマンドライン(ARGV)の解析を行い、 OptionParser#parse! では、ARGV からオプションである-a-bなどが取り除くことができます。オプションを残したければOptionParser#parse を使います。

ruby sample.rb -a foo bar -b baz
# => true
     true
     ["foo", "bar", "baz"]

上記が実行例となります。今回はfoobarbazがオプションとして実行されました。オプションが存在するtrueも結果としてあります。 また、opt.on("-m value") {|v| p v}と、オプションのあとに指定された引数がブロック内のに渡されて、valueを表示させることもできます。

プロを目指す人のためのRuby入門を読んだ感想

はじめに

プロを目指す人のためのRuby入門を読んだ感想を書きたいと思います。

良かった点

コードや例題などがあり、ハンズオンで進めていくことができ、Ruby特有の文法などにも触れることができたので良かったと思う。

学んだこと

正規表現の章は初めて正規表現を学んだ身としては非常に分かりやすいと感じた、ruby特有のコードなどを理解するのは少し時間がかかったが、他のプログラミング言語と違う点などがあり、非常に勉強になった。

難しかったこと

後半の章は特に難しくハンズオンで進めるところは進めて、難しいと感じたとこは読むだけで理解することに努めたが、それでも難しく、実際に実務になると役に立つものだと感じた。

おわりに

実際、読んでみて初心者にも分かりやすく書いてあり、初めてRubyを学習するには最適だと感じた。

Dockerを用いて既存のRailsアプリの環境構築を行う

はじめに

今回はDockerを用いて既存のrailsアプリの環境構築を行っていきます。 基本的なDockerの知識などは詳細には説明しないためご了承ください。

手順

railsプロジェクトをGithub上からローカル上に設定

まず、ローカルに環境構築を行うためのディレクト(build context)を作成しgit clone リポジトリパスrailsプロジェクトをローカル環境に持ってきて、git initで初期化を行います。また、mainブランチから別のブランチを作成し、そこで作業しましょう。

Dockerfileの作成

つぎにDockerfileの作成を行います。rubyのバージョンは既存のRailsプロジェクトのGemfileを参考に作成します。

FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    postgresql-client \
    yarn
WORKDIR /myapp
ADD Gemfile Gemfile.lock /myapp/
RUN bundle install

今回はGemfileとGemfile.lockファイルは元々存在していたので、新たに作成は行いません。

docker-compose.ymlファイルの作成

次にdocker-compose.ymlファイルの作成です。

version: '3'

volumes:
  db-data:

services:
  db:
    image: postgres:12
    volumes:
      - 'db-data:/var/lib//postgresql/data'
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
  web:
    build: .
    volumes:
      - '.:/myapp'
    ports:
      - "3000:3000"
    environment:
      - 'DATABASE_PASSWORD=postgres'
    tty: true
    stdin_open: true
    depends_on:
      - db
    links:
      - db

これらは簡単に言うと、コンテナを起動させる際に必要なコマンドを集約したものであるのと、web(Railsプロジェクト)とdb(データベース)を繋げる役割をするものだと考えてください。

database.ymlファイルの作成

database.ymlファイルには元々存在していたのもに以下のコードを追加し、編集しました。

host: db
user: postgres
password: <%= ENV.fetch("DATABASE_PASSWORD") %> 
port: 5432

dbでpostgresのserviceを定義しているためdbなどを指定し、データベースにアクセスできるようにします。

Railsサーバーを起動させる

以上のファイルなどを作成したあとは、いよいよサーバーを起動させる準備をします。 まず、build contextでdocker compose buildでdockerimageを作成します。特にエラーなどが発生しなければimageができたと思います。 確認ができたら、作成したimageを基にdocker compose up -dでコンテナを起動させます。-dはバックグラウンドで起動するオプションです。 コンテナが作成できたらdocker compose exec web bashでwebコンテナに入ってbashを起動して、Railsサーバーを起動させるのに必要なコマンドをコンテナ内で実行します。 Railsサーバーを起動させるために、rails db:createでDBの作成します。 DB作成後、rails db:migrateでDBに反映させます。 反映後にrails s -b 0.0.0.0Railsサーバーを起動させます。

Railsサーバー起動後

コンテナ内で起動後にお使いのwebブラウザ上でhttp://localhost:3000 を入力して、Railsプロジェクトにアクセスできるか確認します。 アクセスできたら、一度コンテナを停止し、上記の内容をdocker-compose.ymlのwebサービスに追加します。

version: '3'

volumes:
  db-data:

services:
  db:
    image: postgres:12
    volumes:
      - 'db-data:/var/lib//postgresql/data'
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
  web:
    build: .
    # 追加部分
    command: bash -c "rails db:migrate && \
             rails s -b 0.0.0.0"
    volumes:
      - '.:/myapp'
    ports:
      - "3000:3000"
    environment:
      - 'DATABASE_PASSWORD=postgres'
    tty: true
    stdin_open: true
    depends_on:
      - db
    links:
      - db

その際にrails db:createはコンテナ内で初回のみ実行したいので、docker-compose.ymlファイルには記述しません。 追加したら、最後はdocker compose upのコマンドを実行して、http://localhost:3000 にアクセスできたら終了です。

さいごに

説明が不足している部分も多いですが、dockeを用いて環境構築する一連の流れは説明できたと思います。

GitHub Pagesを使ってサイトを公開する

はじめに

今回はGitHub Pagesの公開のやり方について記事にしました。GitHubリポジトリの作成からサイトの公開までを一連の流れにして解説しています。
GitHubアカウントの作成は省略します。

リポジトリの作成

まず、GitHub上でリポジトリを作成します。名前は何でも大丈夫です。
この時に最終的にGitHub Pagesでサイトを公開するのでprivateを選択してください。その他の項目は何も選択しないでリポジトリ作成ボタンを押します。 一旦リポジトリの作成は終了です。

ローカルリポジトリの作成

次にターミナルを使用して、ローカルリポジトリを作成していきます。

  • ローカルリポジトリを置く場所に移動する
    今回はデスクトップで作成します。(cd Desktop)

  • Desktop上でまず、git clone 作成したリポジトリのURLで自身の環境にcloneして持ってきて、cd リポジトリ名で移動する。(cloneしたらリポジトリが作成されるため)

  • cloneした後、git initしてディレクトリの初期化とgitで管理するよと宣言します。

リモートとローカルを結ぶ

以上でローカルの設定はできたので、次にローカルで編集した内容などをリモートに上げて行きたいと思います。

  • まず、git remote add origin リポジトリのURLでリモートリポジトリにアップロードする準備をします。
    (git remote -vでちゃんとリモートと結びついているか確認してみる)

  • 確認できたら、git add .でステージングエリアに乗せて、コミットする準備をします。

  • git statusなどで適宜確認しながら、次にgit commit -m "コミットメッセージ"でコミットします。

  • コミットしたら今度はgit push origin mainでローカルリポにpushします。

変更内容を取り込みたいとき

変更内容を取り込みたいときはローカルリポでmainブランチから切って作業します。(git checkout -b ブランチ名で作って、そのブランチに移動)最終的にローカルリポにpushする時に、git push origin mainブランチから切ったブランチ名でローカルリポに反映させます。

いよいよサイトを公開

変更内容などを取り込んだ後はいよいよサイトを公開します。

  • まずGithub上の作成したリポジトリのページに行って、・・・マークを押してSettingsを選択します。

  • 選択すると左のメニューバーにPagesがあるので選択します。

  • すると、Branchが最初Noneになっているのでmainを選択してSaveを押してページをリロードします。

  • しばらくしたら、Your site is live at https://username.github.io/resume/が出てくるので、そのURLを選択すると自分が作成したサイトが表示されています。

以上で一連の作業は終了で、無事GitHub Pagesを使ってサイトを公開することができました。

おわりに

少し説明が拙いですがご了承ください。細かい操作などは他の記事などを参考にしていただけると幸いです。 GitHub Pagesを使ったサイト公開の大まかな流れは説明できたんじゃないかと思います。

Linuxの基本的なコマンド一覧

はじめに

今回はLinuxのコマンドについて説明したいと思います。

Linuxとは?

まずLinuxとは基本ソフトウェア(OS)の一つであり、基本的にコマンドで操作をします。 Linuxディストリビューション(環境構築に必要なアプリケーションなどをひとまとめにしたパッケージ製品のこと)が豊富であることや、インターネット上に情報が豊富にあること、CUIで操作できる(文字だけで操作)でき、カスタマイズがしやすい点、安全性の高いサーバーとして使用できるという特徴を持っています。

cd(change directory)

cdコマンドはchange directoryの略であり、ディレクトリを変えることができます。 cd ディレクトリ・ファイルで指定したディレクトリ・ファイルに移動することができます。 またcd ..で親ディレクトリ(一つ上の階層)に移動することもできます。

pwd(print working directory)

pwdコマンドは現在自分がいるディレクトリを表示してくれます。 ホームディレクトリで使用すると

~ > pwd
/users/username

のように表示されます。 今どこのディレクトリにいるのか分からなくなった時にpwdコマンドを使用します。

ls(list)

lsコマンドはディレクトリ存在するディレクトリやファイルなどを表示できます。

~/Documents ❯ ls
diff-practice              product-register

今いるディレクトリはDocumentsであり、その中にはdiff-practiceとproduct-registerというディレクトリ・ファイルが入っている状態です。 このようにディレクトリ・ファイルの一覧が表示されます。

mkdir(make directory)

mkdirコマンドはmkdir ディレクトリディレクトリを作成することができます。

~ > mkdir example
~ > ls
example

ホームディレクトリでexampleディレクトリを作成しました。それをlsコマンドで確認すると 確かにexampleディレクトリが作成されていることがわかります。

rmdir(remove directory)

rmdir ディレクトリディレクトリを削除することができます。 削除されるディレクトリは中身が何も入っていない空のディレクトを削除します。

cat(concatenate)

cat ファイルでファイルの中身を見ることができます。

~ > cat index.html
<p>Hello World</p>

上記はindex.htmlファイルの中身を確認しました。HTMLファイルなのでファイルの中身は <p>Hello World</p>と記述されています。

less

less コマンドは、ファイルの内容が長い時に使用します。 less ファイル名で起動することができます。 lessコマンドを使用するファイルは画面に収まらない場合があるので以下のコマンドを使用してファイルの中身を確認します。

コマンド ファイル内の挙動
スペース 次ページへ進む
b 前の画面に戻る
f 次の画面に進む
前の行に進む
次の行に進む
/単語 単語を検索
q コマンド終了

コマンドを組み合わせてファイルの中身を確認できます。

tail

tailコマンドはファイルの最終行を表示してくれます。 オプションをつけなかった場合、末尾から10行を表示します。 tail -n 行数 ファイル名で末尾からn行を表示できます。 他にもtail -f ファイル名でファイルの変更状態を常に確認することができます。

touch

touchコマンドはtouch ファイル名でファイルのタイムスタンプを変更します。 ファイルのタイムスタンプとは、ファイルへのアクセス日時や更新日時のことです。 存在していないファイル名の場合は空ファイルを作成してくれます。

rm(remove)

removeコマンドはrm ファイル名でファイルを削除することができます。 rm -f ファイル名ディレクトリやディレクトリの中にあるファイルなども削除することができます。 また一度削除したファイルを復活させることはできないため、ファイルを削除する時に確認を取りたいときにはrm -i ファイル名で誤ってファイルを削除することを防ぐことができます。

mv(move)

mvコマンドはmv 変更前のファイル名 変更後のファイル名でファイルの名前を変える事ができます。 また、ファイルの名前を変更ができるだけでなく、mv ファイル名 移動先のディレクトリ名ファイルを別のディレクトリに移動することもできます。

cp(copy)

cpコマンドはファイルやディレクトリをコピーする時に使用します。

~ > cp コピー元ファイル名 コピー先ファイル名

~ > cp test.txt test2.txt

このようにtestファイルの内容をtext2のファイルにコピーすることできます。

lnコマンドln リンク元ファイル リンク後の名称を実行することでリンクを貼ることができます。 つまり、ファイルやディレクトリのリンクを作成する事ができます。 またリンクの貼り方にも種類があって、ハードリンクとシンボリックリンクの2つがあります。 シンボリックリンクを作成するには-sオプションをつけます。 lnコマンドに何もオプションをつけないで実行するとハードリンクが作成されます。

ハードリンク シンボリックリンク
ハードリンクを削除しても
元ファイルは削除されない
元ファイルを消すと
シンボリックリンクからアクセスエラーになる

上記の他にも違いがありますが、これらがハードリンクとシンボリックリンクの代表的な違いです。

find

findコマンドはfind パス名 -name ファイル名ディレクトリ配下にあるファイル名を検索することができます。 またディレクトリを検索する際に一般ユーザーに実行権限が与えられていない場合もあります。

chmod(change mod)

chomodコマンドはファイルのアクセス権を変更する際に使用されます。 ファイルのモードを所有ユーザー、所有グループ、その他のユーザーに設定します。

所有ユーザー 所有グループ その他ユーザー
rwx r-- r--

上記のr、w、xはそれぞれ読み込も、書き込み、実行を意味しており、上記では 所有ユーザーはrwx なので3つの権限があり、所有グループはr--なので読み込みのみに権限があり、 その他ユーザーはr--なのでこちらも読み込みのみに権限があるという意味です。 これらの権限を変更する事ができるのがchmodコマンドです

chown(change owner)

chownコマンドはファイルの所有者を変更する際に使用されます。 実行するにはrootユーザーである必要があります。一般ユーザーでファイルを作成した後、ファイルの所有者の変更はできないため、必ずrootユーザでなければいけません。

ps

psコマンドは現在実行中のプロセスなどを確認するためのコマンドです。

オプション 効果
-A すべてのプロセスを選択することができる
e コマンドの後に、環境を表示

kill

Linuxにはシグナルというイベントを送信してプロセス制御する機能があり、killコマンドはシグナルの一種です。 killコマンド指定したプロセスIDのプロセスを終了させることができます。 kill オプション プロセスIDで指定したプロセスを終了することができます。

Column 1 Column 2
-s 指定したシグナル名orシグナル番号を送信
-l シグナルの種類を表示

おわりに

以上、Linuxの基本的なコマンドについて解説しました。 サーバーなどを操作する際にはLinuxの知識は必須なのでぜひ習得しましよう!!

Vimの超基本的な操作方法

はじめに

今回はVimの基本的な操作方法について説明したいと思います。 本記事では基本的な操作に絞って解説していきます。

Vimとは

まずそもそもVimとは何か?
Vimとはテキストエディタの一種です。Vimの優れている点はキーボード上でカーソル移動やコピー、貼り付け、削除などが完結できることです。
Vimの必要最低限のコマンドを覚えるだけでも快適に作業できるため、次に紹介するコマンドだけでも習得しましょう。

ではコマンドを紹介していきます。

Vimのモード

まず、Vimには3つのモードがあります。

  • NORMALモード

    NORMALモードはコマンドを入力することができます。NORMALモードに入るにはEscキーで入ることができます。

  • INSERTモード

    INSERTモードは文字を入力することができます。 INSERTモード に入るにはiaキーなどで入ることができます。

  • VISUALモード

    VISUALモードは文字を選択することができます。VISUALモードに入るにはvキーで入ることができます。

    Vimはこの3つのモードを行き来してファイルの作成や編集を行います。

移動コマンド

まずは基本的な移動コマンドです。まず作業を行う前にNORMALモードにしておきましょう。

コマンド 意味
h カーソルを左に移動
j カーソルを下に移動
k カーソルを上に移動
l カーソルを右に移動

上記のコマンドでも移動できますが、もっと効率的に移動するコマンドも存在します。

コマンド 意味
A カーソル行の最後にINSERTモード
I カーソル行の最初にINSERTモード
$ カーソル行の最後にNORMALモード
^ カーソル行の最初にNORMALモード
i カーソルの手前にINSERTモード
a カーソルの直後にINSERTモード

また単語ごとに右にカーソルを移動するコマンド w、単語ごとにカーソルを左に移動するコマンドbも便利なコマンドです。

コピー・ペースト・削除コマンド

次にコピー・ペースト・削除コマンドです。

コマンド 意味
yy カーソル行をコピー
y VISUALモードで選択した範囲をコピー
p コピーしたものを貼り付ける
dd カーソル行削除
d 選択範囲削除
x カーソルの手前の文字削除

またyコマンドはVISUALモードで選択して、選択範囲をコピーしてpコマンドで他の行などに貼り付けられます。
他にも選択範囲を決めて、dコマンドでその選択範囲を削除することができます。
選択範囲を決めるにはvコマンドでVISUALモードに入り、カーソルがある位置からhjklコマンドで選択範囲を決めることができます。
自分の中ではマウスを使わずに選択できるのでvhjklは本当に重宝しています。

保存コマンド

次に保存コマンドです。
保存コマンドは NORMALモードで行います。

コマンド 意味
:w ファイルの保存
:q ファイルを閉じる
:wq 上2つを組み合わせて、ファイルを保存して終了

:をつけてファイルの保存やファイルを終了します。

終わりに

今回紹介したコマンドは基本中の基本コマンドです。まずは今回紹介したコマンドを覚えましょう。
また必要に応じて新しいコマンドを覚えたり、コマンドを組み合わせたりしましょう。
一番習得できる方法は実際に自分で操作したり、「こういう操作がしたい」と思った時に自分で調べてみたりするのが良いと思います。

web技術に関する基本的用語の説明

はじめに

web技術に関する基本的な用語についてまとめたのでみなさまの参考になれば幸いです。 それでは解説をしていきたいと思います。

ステートフル(stateful)

まず、利用者(クライアント)がブラウザ上でオンラインショッピングサイトにログインする際にユーザー名とパスワードが求められることがあると思います。ログインしたあと自分が欲しい商品を検索して買い物かごに入れたり、また違う商品を探したりすると思います。

買い物中にユーザー名とパスワードをサーバー側は覚えていてくれてるためいちいちログインを求められません(ある程度時間が立つとログアウトされる)。

これこそがステートフルな状態であると言えます。

つまりサーバー側が一連の流れを保ったまま、違う処理を行うことがステートフルな状態であると言えます。 一つの商品を買い物かごに入れた後、違う商品を買い物かごに入れるという一連の流れが可能なのは ステートフルな状態であるからなのです。

ステートレス(stateless)

一方でステートレスとは、通信プロトコルの一つであるHTTPなどがあり、クライアントの要求をサーバー側がただレスポンスするだけなのです。 ※通信プロトコルとはwebサーバーとwebクライアント側が通信を行う際のルール

ステートフルと異なり情報の維持などができない状態であるため、ステートレスな状態と呼ばれています。 一見ステートフルな状態のほうが良さそうですが、ステートフルな状態は常にクライアント側の情報を記録し続けないといけないため、サーバー側にかかる負荷が大きくなります。

リクエス

先程のステートレスで登場したリクエストについてです。 リクエスとはwebクライアントからwebサーバーに対する要求のことを指します。 簡単に説明すると、webブラウザ上にURLを打ち込むと、webサーバーからHTML形式でURLの情報が返ってきます。 このやり取りに関して、webブラウザ上のURLをwebサーバーに送ることがリクエストと呼びます。

レスポンス

レスポンスはwebサーバーからクライアントに対する応答のことを指します。 webブラウザ上のURLをwebサーバーがHTML形式でwebクライアントに対して返答することを指します。

クッキー

クッキーとはwebブラウザに状態を持たせた技術です。 説明しますと、HTTPはステートレスなプロトコルであるのは上記で説明しました。 クッキーはHHTPを拡張してweb上で情報を保存できるようにした技術です。 クッキーには以下の特徴があります。

  • ユーザーのパソコンやスマートフォンに一時的に情報を保管しておく
  • ユーザーのみならずwebアプリケーションの管理者もサイトに訪れた情報や履歴を元にユーザー専用の情報を提供する。

といったような特徴があります。

プロトコル

プロトコルとはwebサーバーとwebクライアントが通信するためのやり取りの仕組みを表したものです。 webアプリケーションではほとんどHTTPプロトコルを使用しています。 相手と様々な情報をやり取りするには事前にこうしておこう、と言った感じにルールを決める必要があります。 web上ではこうした取り決めを通信プロトコルと呼ばれており、通信プロトコルがあることによってwebクライアントとwebサーバーがスムーズにやり取りできるのです。

ポート番号

ポート番号とは通信プロトコルの下で多くの人とやり取りするためのIPアドレスの下にあるサブアドレスのことを言います。 簡単に説明すると、IPアドレスが住所でポート番号が部屋番号です。 インターネットに接続されているコンピューターは無数にありますよね、その中から適切なコンピューターを探し、やり取りするために必要なのがIPアドレス(住所)とポート番号です(部屋番号)です。

以上、わかりにくいかも知れませんがweb技術に関する基本的な用語の説明でした。 まだまだ勉強中・勉強不足であるので至らぬ点がございますがご了承ください。