いなみんSEブログ

田舎出身、上京SEの勉強日誌

Ruby (Ruby on Rails)始めました!!

晴れてSierを卒業し、2019年9月からWEB系の会社に転職しました。 今までは.NET系(C#)やJavaをメインに仕事をしていましたが、転職を機にガラッと技術もかわりました。

入社してすぐはPHP(Laravel)を触っていましたが、全く毛色が違うRubyの経験をすることができたので 即戦力になるために書籍を使用して勉強したので、メモを残しておきます。

使用した書籍

プロを目指す人のためのRuby入門

www.amazon.co.jp

所感

基本的な構文の説明から丁寧に記載されており、初心者〜別言語経験者まで幅広くカバーしている書籍です。 私は別言語経験者のため、所々で別言語と比較した記載があったのでイメージがより湧きました。

簡単な内容紹介

  • 開発環境構築
  • 変数宣言
  • 四則算子
  • 配列操作
  • Hash
  • 分岐(if, unless)
  • ループ→Rubyならではの便利な構文の使用方法を分かりやすく説明しています!!
  • メソッド
  • クラス
  • MiniTestについて

勉強方法

最終目標はRuby on RailsAPIの作成です。

Rubyの勉強

  • 書籍やサイトを参考に基本的な構文を学ぶ
    • 変数宣言
    • 配列、Hash
    • if文, whileなどの分岐
    • each, mapなどのループ ※重要
    • 例外処理 (追々でも大丈夫でした)
    • クラスの作成、継承
  • 配列やHashをeachやmapを使用して遊んでみる →他言語経験者からするとforeachの印象が強く、強制するために重点的に勉強しました
  • Gem, Bundlerの使い方
  • デバッグ手法について学ぶ
    • IDEを使用している場合はブレイクポイント、ステップ実行について
    • 私はvim, vscodeなのでbinding.pryを使用しました (vscoderuby-debug-ideも使えますが)

Ruby on Railsの勉強

  • MVCの構造について知る →私は他言語で習得済みなので割愛
  • プロジェクトのフォルダ構成を知る
    • app/controllers
    • app/models
    • app/views
    • db/migrate など
  • migrationの方法を学ぶ
  • 便利なrails generateの使用方法を学ぶ →勉強にならないのでscaffoldは封印
  • ActiveRecordの使用方法を学ぶ
  • ERBの書き方を学ぶ
  • テストについて学ぶ
    • Mockの使い方
    • fixtureの使い方 など

最後に

私は他言語の経験があるので意外とすんなり業務で使えるくらいまで行けました。

他の言語同様、オブジェクト指向の基礎はだいたいそのまま使えるので 何か1つの言語をしっかりマスターすれば応用が効きますね!!

サーバーサイドエンジニアが本気で学ぶフロントエンド(React) Part1

今までサーバーサイドメインで開発を行なっていましたが、フルスタックを目指しているので改めてフロントエンドの勉強をしたいと思います!

経緯

会社でフロントエンドチームがReactを使用していて、いつも大変そう。 フロントエンドの経験も欲しいため、お手伝いしたい!!!

また、技術書典でReact x AWS Amplifyの書籍を出版したが、React側はノータッチだった悔しさから。

crazybrothers.booth.pm

参考資料

この記事を記載した日に購入したこちらの技術同人誌を参考としています。

booth.pm

私のスペック

※時期が被っているので、合計すると通算より多くなります

業界歴:2014年~

  • C# : 歴5年
  • Java : 歴4年
  • C/C++,VB.NET : 歴半年
  • PHP : 歴1ヶ月
  • Python : 趣味レベル
  • Ruby : 趣味レベル
  • Go : 趣味レベル
  • Vue/Nuxt.js : 趣味レベル
  • jQuery : 歴5年

と、一応 Vue.jsを触ったことがあるので無からのスタートではないですが、今まで敬遠していたReactを真面目に勉強します。

前準備

フロントエンド開発に必要なツール等を羅列します。

  • npm : JavaScript用のパッケージマネージャ
  • npx : npmを使わなくてもnpmのパッケージを使用したコマンドが使えるやつ
  • yarn : npmのコマンドをさらに使いやすく、そして早くしたやつ →主に一時的に開発環境を整えたりするときに使うやつ?(create-react-appとか)
  • Visual Studio Code : C#やってる人からするとおなじみではあるけど、TypeScriptと相性良いらしい
  • React : Facebookが開発したSPA(シングルページアプリケーション)のライブラリ ※フレームワークではない
  • ES6(ES2015) : JSの標準規格。アロー関数, let/constなどなど、昔からのJSよりかなり進化している

Reactの事始め

実際にReactのコードを書いていきます。 ゴリゴリのCSharperだったことと、TypeScriptの時代が来ているらしいのでTypeScriptで勉強進めます。

# プロジェクト作成
npm create-react-app hello-world --typescript

# 実行
yarn start

お!、ブラウザ勝手に立ち上がった!!!

f:id:nsutmry_ngomry:20191007231032p:plain

画面を表示するまで、コードを一切書かずに完了しました。

では、実際に作成されたプロジェクトの中身を覗いてみます。

hello-react
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock
  • node_modules : 開発に必要なパッケージが入る
  • package.json : 使用しているパッケージや、ビルド用のコマンドを管理するjson
  • public : 起点となるhtmlファイルや画像などが入っている
  • src : 実際にコードを作成していくフォルダ
  • yarn.lock : package.jsonのパッケージに依存するパッケージについて書いてあるとても長いやつ

Reactはライブラリなので、そこいらのフレームワークと違ってcreate-react-appを使わない場合はフォルダ構成の縛りも無いのかな??

深夜のテンションで記載しているので、一旦ここまでとします!!! 気力があれば翌日更新します。

Apple Watchの修理について

今回話したいこと

Apple WatchApple Careには必ず入りましょう!!!

経緯

お盆休みを利用してヨーロッパ周遊旅行に行きました。

Apple WatchiPhoneと同期していれば自動で現地の時間を表示してくれるため、 非常に重宝していました。

が、、、、

現地のゲストハウスでApple Watchを落としてしまい・・・ なんとディスプレイではなく本体(センサー側)にヒビが・・・

購入時にケチってApple Careに入っていなかったため、恐る恐る公式サイトの修理金額を確認。

f:id:nsutmry_ngomry:20190821143110j:plain
Apple Watch修理代

そして衝撃のお値段・・・ 大体購入費の半額は取られます。

Apple Careの料金

2019年8月時点ではSeries4の場合「7,800円(税別)」で加入ができます。
ただし、購入から30日以内に加入する必要があります。

加入することで以下のサポートを受けることができます。
過失の損傷でも2回まで安く修理できます。

f:id:nsutmry_ngomry:20190821143440j:plain
保証一覧

今回私は税込36,000円ほど修理代がかかりましたが、加入しておけば8,400円(税別)で済んだとのこと。。。

f:id:nsutmry_ngomry:20190821143434j:plain
修理価格

最後に

冒頭で述べましたが、Apple WatchApple careは加入する価値があります!
個人的には「必須」くらいで考えています。
目先の「7,800円(税別)」をケチって私のように後で後悔しないように、加入を強くお勧めします。

Docker入門 ※ハンズオンあり

※スライドから転用です。

Docker入門 - HackMD

Dockerとは

Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアである
VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。 ※Wikipediaより

いきなり製品紹介されても・・・

従来の基盤から考えてみよう

オンプレミスでの開発

  1. サーバーを調達
  2. OSのインストール・設定
  3. ミドルウェア等のインストール
  4. アプリケーションをデプロイ

冗長化する場合、

新しくサーバーを調達する必要がある

しかも、

1台ずつ同じ設定をしなければならない

仮想サーバーの場合

  1. OSのインストール・設定
  2. ミドルウェア等のインストール
  3. アプリケーションをデプロイ

冗長化する場合

1台サーバーがあればその中に複数台構築が可能
複製も楽に行える

※Docker公式の画像を拝借

オンプレ・仮想

共通の問題点

環境差異による障害

→検証環境では動いたのに本番では動かない

😈インストール漏れ
😈設定漏れ

そこで、😮

Docker使えば解決できる!!

Docker Logo

Dockerでできること

  • 検証環境の構成をそのまま本番へ展開
    →環境差異がなくなる

  • 環境をコードで管理
    →どの環境でも同じ手順でインストール・設定

つまり、

検証した環境をリリースできる!

インストール漏れもなくなる!

具体的な開発例

従来の場合

  1. アプリ開発
  2. サーバー構築・設定
  3. ミドルウェアの構築・設定
  4. アプリをデプロイ

Dockerを使用する場合

  1. アプリ開発、Dockerfileの作成
  2. サーバー構築・設定
  3. Dockerをインストール
  4. Docker上にコンテナ(アプリ)を展開

ミドルウェアの構築が不要に!!!
★環境差異がなくなる!!!

Dockerの開発環境

手軽に試したい場合

Play with Docker

インストールの手間がないため、手軽に試せる

https://labs.play-with-docker.com/

実際に試してみよう

アカウント作成・ログイン

アカウントがない場合は以下から作成

インスタンス作成

起動すると以下の画面が表示される

Docker上でNginxを使う

以下のコマンドを実行

$ docker run --name nginx-study -d -p 80:80 nginx

docker run nginx

説明

  • docker run ・・・コンテナの実行

  • --name ・・・コンテナに名前を付与

  • -d ・・・デーモン実行
  • -p ・・・ポートフォワーディング

起動を確認

$ docker ps

docker ps

画面表示確認

view nginx

たったこれだけ!!!

It works

コンテナの停止・削除

# コンテナ停止
$ docker stop nginx-study
# コンテナ削除
$ docker stop nginx-study

作成したHTMLを表示する

# サンプルHTMLを取得
$ git clone https://github.com/MasanoriIwakura/docker-nginx.git

# 実行
$ docker run --name nginx-study -d -p 80:80 \
-v ${PWD}/docker-nginx/html:/usr/share/nginx/html nginx

こんな感じで表示される

次回予告

Docker Composeを使って複数コンテナを連携してみよう!

例) PHPコンテナ と MySQLコンテナを連携

Dockerの事始め

Dockerとは

Dockerは、コンテナ型の仮想環境を提供するソフトウェアです。

と、言ってもコンテナって?仮想環境って?となる方もいらっしゃるかと思います。

従来(オンプレミス)の環境

従来のソフトウェア開発では、

  1. サーバー機材の調達
  2. サーバーの構築(OS設定等)
  3. サーバー上にミドルウェアのインストール
  4. 作成したソフトウェアを配置(デプロイ) の手間がありました。

※後で画像貼ります。

そして時代は仮想環境へ

VMwareVirtualBoxHyper-V等の1台のサーバー上に複数のサーバーを構築する仮想環境が出回りました。

こちらの仮想環境については、「ハイパーバイザ型」と呼ばれます。

f:id:nsutmry_ngomry:20190420151705p:plain
※Docker公式より転用

コンテナについて

ハイパーバイザ型はホストOS上にゲストOSをインストール、更にミドルウェアをインストールしてその上にアプリケーションを構築する必要がありました。

コンテナはDockerをインストールし、Docker上でコンテナを実行するだけで動作します。

f:id:nsutmry_ngomry:20190420151918p:plain
※Docker公式より転用

オンプレミス、ハイパーバイザ、コンテナの比較

[オンプレミス]

上記にも記載しましたが、オンプレミスでは機材調達〜アプリケーションのデプロイまでの手間があります。
また、同様の構成で複数サーバーを立ち上げるとなるとその都度同じ作業を行う必要があります。

■メリット

  • 単一のOS上で動作するため、仮想と異なり他のOSにリソースを奪われない

■デメリット
* 機材の調達が必要 * 複数サーバー立ち上げる場合は都度構築が必要

[ハイパーバイザ]

オンプレミスと違い、ホストがあればその上に複数のOSを展開することができます。
複数サーバーを立ち上げる場合も同一ホスト上であればOSイメージを複製し、ちょっと設定を変更する程度で動かせます。
別のホスト上でも同一の仮想ソフトウェア上であればOSイメージを展開することもできます。

■メリット
* 複製が容易

■デメリット
* ゲストOSのインストール、ミドルウェアのインストールの手間がある

[コンテナ]

ホストOS上にDockerをインストールするだけでコンテナ化されたアプリケーションを実行できます。
ハイパーバイザと比べた場合、環境構築が簡単に行える、起動・再起動が高速と言ったメリットがあります。

■メリット
* ハイパーバイザと比べて起動・再起動が高速 * Dockerさえ入れればどこでも動く

■デメリット
* Windows上でないとWindowsコンテナが実行できない

Dockerの歴史

時期 内容
2013年3月 Docker登場
2014年 Googleが毎週20億個のコンテナを起動していると発表

2014年代から本格的に普及し出します。
※この頃、私は新卒でした。。。

歴史についてはあまり触れても本記事の趣旨ではないので、興味がある方は調べみてください。

Dockerは何ができるの?

従来の開発では、開発PC上で開発環境を構築し、テスト環境、本番環境全てでアプリケーションを実行する環境の構築が必要でした。
環境構築は誰かが行い、他のメンバーは先に作った人から聞きながら、手順書があれば見ながら構築しないと作業が行えませんでした。

Dockerを使うとDockerさえインストールされていればコマンドを実行するだけで簡単に開発に必要な環境を構築することができます。

例)
LAMP環境の構築

■従来

  1. LINUX環境の構築(ハイパーバイザ)
  2. MySQL(MariaDB)のインストール・設定
  3. Apacheのインストール・設定
  4. PHPと必要なライブラリのインストール

■Dockerの場合

  1. Dockerのインストール ※インストール済みの場合は不要
  2. Dockerコンテナ実行 ※もちろん、コンテナを作成する必要がありますが。

つまり、誰か1人がコンテナイメージを作りさえすれば他の人はコンテナを実行するだけで環境構築が可能です。
また、開発で使用したコンテナはそのまま本番環境で動かすことも容易に行えます。

疲れちゃったので今回はここまでとします。
次回はDockerのインストールから説明します。

SQL Server + ASP.NET(C#) WEBアプリ開発 その1

お客様の要望でタイトルの要件でWEBアプリの構築を依頼されました。
勉強と予習を兼ねてブログにメモを残しながら開発していこうかと思います。

<目次>

■開発環境

 [OS] Windows 10(64bit)
 [DB] SQL Server 2014 Express(Windows 7で使用できる最新版)
 [IDE] Visual Studio 2015 Community

SQL Server 2014 Expressの準備

 1.下記のサイトからダウンロードします。
 ※サポート期間次第ではリンク切れの可能性があります
 
Download Microsoft® SQL Server® 2014 Express from Official Microsoft Download Center

f:id:nsutmry_ngomry:20170713210333p:plain


私の環境は64bitなので64bit版のツール付きでインストールしたいと思います。

f:id:nsutmry_ngomry:20170713211058p:plain

ダウンロード後、案内に沿ってインストールを行います。

f:id:nsutmry_ngomry:20170713212632p:plain
今回はアップグレードではないので上を選択します。

以下、私が行った手順を添付していきたいと思います。
f:id:nsutmry_ngomry:20170713212758p:plain

システム要件を満たすと以下の画面に遷移します。
今回はこのままインストールします。
f:id:nsutmry_ngomry:20170713215836p:plain

インスタンスIDを設定します。
f:id:nsutmry_ngomry:20170713220058p:plain

初めてインストールするので、とりあえずデフォルトでインストールしていきたいと思います
f:id:nsutmry_ngomry:20170713220235p:plain

青塗部分は管理者名です。
f:id:nsutmry_ngomry:20170713220414p:plain

以上でインストールは完了です。
f:id:nsutmry_ngomry:20170713222219p:plain

Visual Studioは既に準備できているので今回は省略させていただきます。

その2ではソリューション構築から書いていきます。

Dismを使った自動ディスクバックアップ作成

ご無沙汰しております。

昨日の仕事終わりに常駐先のプロパーさんからこんな要望をいただきました。
「POS端末のディスクバックアップを作成する作業を自動化したい」

現在手動で行っているのが以下(だったと思う)
1.SYSTEM領域にドライブレター設定
2.SYSTEM領域のバックアップをDismコマンドで作成
3.CドライブのバックアップをDismコマンドで作成

2と3は苦労せずに出来そうだけど、曲者なのは1でした。

1を行うにはDiskpartコマンドを使用します。
Diskpartコマンドを自動化するには、管理者権限での実行が必須です。SYSTEM領域にドライブレターを設定します。

diskpart
rem ボリューム一覧表示
list vol

rem 表示されたボリュームのInfoがシステムのvolumeを選択
select vol=0

rem ドライブレターを設定 埋まってなさそうなSを指定
assign letter=s

今回は上記の内容を自動で行いたいので、一度リダイレクトでlist volを出力して、
正規表現でシステム領域のVolumeを割り出して設定してみました。

@echo off
setlocal enabledelayedexpansion

rem 管理者実行するため、カレントを自分の配置場所に移動
cd /d %~dp0

set vol=nul
for /f "delims=" %%a in (volume.txt) do (
	rem 英語環境の場合は"SYSTEM"や、"Hidden"になるかも
	echo "%%a" | find "システム" >nul 2>&1
	
	if not errorlevel 1 (
		set vol=%%a
	)
)

if not vol==nul (
	rem 半角SP+半角SP+Volumeで0~8
	set vol=%vol:~9,2%
	echo SYSTEM Volume=!vol!
)

rem スクリプト作成
echo select vol=!vol! > script.txt
echo assign letter=s >> script.txt
echo exit >> script.txt

rem SYSTEMボリュームにレター設定
diskpart /s script.txt > diskpart.log

rem あとは設定したSドライブのバックアップをDismを使用して作成する

pause

Dismのコマンドは忘れたので参考URL貼っておきます
https://msdn.microsoft.com/ja-jp/library/hh825072.aspx