Ruby (Ruby on Rails)始めました!!
晴れてSierを卒業し、2019年9月からWEB系の会社に転職しました。 今までは.NET系(C#)やJavaをメインに仕事をしていましたが、転職を機にガラッと技術もかわりました。
入社してすぐはPHP(Laravel)を触っていましたが、全く毛色が違うRubyの経験をすることができたので 即戦力になるために書籍を使用して勉強したので、メモを残しておきます。
使用した書籍
プロを目指す人のためのRuby入門
所感
基本的な構文の説明から丁寧に記載されており、初心者〜別言語経験者まで幅広くカバーしている書籍です。 私は別言語経験者のため、所々で別言語と比較した記載があったのでイメージがより湧きました。
簡単な内容紹介
- 開発環境構築
- 変数宣言
- 四則算子
- 配列操作
- Hash
- 分岐(if, unless)
- ループ→Rubyならではの便利な構文の使用方法を分かりやすく説明しています!!
- メソッド
- クラス
- MiniTestについて
勉強方法
最終目標はRuby on RailsでAPIの作成です。
Rubyの勉強
- 書籍やサイトを参考に基本的な構文を学ぶ
- 変数宣言
- 配列、Hash
- if文, whileなどの分岐
- each, mapなどのループ ※重要
- 例外処理 (追々でも大丈夫でした)
- クラスの作成、継承
- 配列やHashをeachやmapを使用して遊んでみる →他言語経験者からするとforeachの印象が強く、強制するために重点的に勉強しました
- Gem, Bundlerの使い方
- デバッグ手法について学ぶ
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側はノータッチだった悔しさから。
参考資料
この記事を記載した日に購入したこちらの技術同人誌を参考としています。
私のスペック
※時期が被っているので、合計すると通算より多くなります
業界歴: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
お!、ブラウザ勝手に立ち上がった!!!
画面を表示するまで、コードを一切書かずに完了しました。
では、実際に作成されたプロジェクトの中身を覗いてみます。
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 Watchの Apple Careには必ず入りましょう!!!
経緯
お盆休みを利用してヨーロッパ周遊旅行に行きました。
Apple WatchはiPhoneと同期していれば自動で現地の時間を表示してくれるため、 非常に重宝していました。
が、、、、
現地のゲストハウスでApple Watchを落としてしまい・・・ なんとディスプレイではなく本体(センサー側)にヒビが・・・
購入時にケチってApple Careに入っていなかったため、恐る恐る公式サイトの修理金額を確認。
そして衝撃のお値段・・・ 大体購入費の半額は取られます。
Apple Careの料金
2019年8月時点ではSeries4の場合「7,800円(税別)」で加入ができます。
ただし、購入から30日以内に加入する必要があります。
加入することで以下のサポートを受けることができます。
過失の損傷でも2回まで安く修理できます。
今回私は税込36,000円ほど修理代がかかりましたが、加入しておけば8,400円(税別)で済んだとのこと。。。
最後に
冒頭で述べましたが、Apple WatchのApple careは加入する価値があります!
個人的には「必須」くらいで考えています。
目先の「7,800円(税別)」をケチって私のように後で後悔しないように、加入を強くお勧めします。
Docker入門 ※ハンズオンあり
※スライドから転用です。
Dockerとは
Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアである
VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。
※Wikipediaより
いきなり製品紹介されても・・・
従来の基盤から考えてみよう
オンプレミスでの開発
- サーバーを調達
- OSのインストール・設定
- ミドルウェア等のインストール
- アプリケーションをデプロイ
冗長化する場合、
新しくサーバーを調達する必要がある
しかも、
1台ずつ同じ設定をしなければならない
仮想サーバーの場合
- OSのインストール・設定
- ミドルウェア等のインストール
- アプリケーションをデプロイ
冗長化する場合
1台サーバーがあればその中に複数台構築が可能
複製も楽に行える
※Docker公式の画像を拝借
オンプレ・仮想
共通の問題点
環境差異による障害
→検証環境では動いたのに本番では動かない
😈設定漏れ
そこで、😮
Docker使えば解決できる!!
Dockerでできること
検証環境の構成をそのまま本番へ展開
→環境差異がなくなる環境をコードで管理
→どの環境でも同じ手順でインストール・設定
つまり、
検証した環境をリリースできる!
インストール漏れもなくなる!
具体的な開発例
従来の場合
Dockerを使用する場合
- アプリ開発、Dockerfileの作成
- サーバー構築・設定
- Dockerをインストール
- 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 ・・・コンテナの実行
--name ・・・コンテナに名前を付与
- -d ・・・デーモン実行
- -p ・・・ポートフォワーディング
起動を確認
$ docker ps
画面表示確認
たったこれだけ!!!
コンテナの停止・削除
# コンテナ停止 $ 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を使って複数コンテナを連携してみよう!
Dockerの事始め
Dockerとは
Dockerは、コンテナ型の仮想環境を提供するソフトウェアです。
と、言ってもコンテナって?仮想環境って?となる方もいらっしゃるかと思います。
従来(オンプレミス)の環境
従来のソフトウェア開発では、
- サーバー機材の調達
- サーバーの構築(OS設定等)
- サーバー上にミドルウェアのインストール
- 作成したソフトウェアを配置(デプロイ) の手間がありました。
※後で画像貼ります。
そして時代は仮想環境へ
VMwareやVirtualBox、Hyper-V等の1台のサーバー上に複数のサーバーを構築する仮想環境が出回りました。
こちらの仮想環境については、「ハイパーバイザ型」と呼ばれます。
コンテナについて
ハイパーバイザ型はホストOS上にゲストOSをインストール、更にミドルウェアをインストールしてその上にアプリケーションを構築する必要がありました。
コンテナはDockerをインストールし、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環境の構築
■従来
■Dockerの場合
- Dockerのインストール ※インストール済みの場合は不要
- 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
私の環境は64bitなので64bit版のツール付きでインストールしたいと思います。
ダウンロード後、案内に沿ってインストールを行います。
今回はアップグレードではないので上を選択します。
以下、私が行った手順を添付していきたいと思います。
システム要件を満たすと以下の画面に遷移します。
今回はこのままインストールします。
インスタンスIDを設定します。
初めてインストールするので、とりあえずデフォルトでインストールしていきたいと思います
青塗部分は管理者名です。
以上でインストールは完了です。
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