ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

Rubyを始めてみた2:Ruby on Rails 導入

前回に続いてRubyの習得を進めていきます。

引き続きこちらのシリーズ記事にお世話になります。

SQLiteのインストールの手順でDLしたファイル「sqlite-dll-win64-x64-3280000.zip」と「sqlite-tools-win32-x86-3280000.zip」は私の場合は「C:\Ruby26-x64\bin」の中に入れる形でした。
・SQLite3-1.4.1
・DLしたファイルのバージョンは 3.28.0

いろいろメモ


Dドライブへの移動

cd /d D:


railsで新しいアプリケーションを作成する

rails new アプリケーション名

 

アプリケーション作成時の対応について


チュートリアルで「books」というアプリケーションを作成する手順がありますが、実行すると「Bandle complete!」というメッセージに続いて下記のような注意書きが表示されました。

NOTICE: chromedriver-helper is deprecated after 2019-03-31.

Please update to use the 'webdrivers' gem instead. See https://github.com/flavorjones/chromedriver-helper/issues/83


「chromedriver-helper」は使わずに「webdrivers」を使うようにということのようです。

という訳でこちらの記事を参考に移行しました。

今アプリケーションを作成したフォルダ直下に「Gemfile」という拡張子の無いテキストファイルがあるので適当なテキストエディタで開いて54行目あたりの「gem 'chromedriver-helper'」を「gem 'webdrivers'」に書き換えて保存。

その後コマンドプロンプトで「Gemfile」が入っているフォルダへ移動して「bundle install」を実行すれば再度インストールされて移行完了となります。

ウェブサーバーアプリケーションの起動について


WEBrickサーバーを起動する方法を解説されていますが「Puma」が起動してしまいます。軽くググってみたところ、Rails 5 からデフォルトのサーバーが Puma に変わった様子。

Pumaで試してみて全く問題ない感じでしたが、一応チュートリアルに合わせるために WEBrick で起動する方法もメモっておきます。
また、Puma も WEBrick も Ctrl + C で正常にサーバーを停止できました。

起動
rails server ※Rails 5 からは Puma が起動してしまう

起動(WEBrickを指定)
bundle exec rails server webrick ※こちらでうまくいきました

ブラウザでの確認先アドレス
http://localhost:3000/

停止
Ctrl + C


ちなみに、チュートリアルのように「Welcome aboard」ページが表示されず「Yay! You’re on Rails!」というタイトルのページが表示されますが、こちらでバージョンだけは確認できるのでこれで良いのですかね。。

publicフォルダを開いても「index.html」ファイルが見当たらないのですが、チュートリアルの「静的コンテンツの表示」まで進めると「index.html」の中身を書き換えて確認する手順が解説されるので、この時点で作成してlocalhostにアクセスしたら無事に Hello world!」が表示されました(start.htmlに変更する部分はスルーして実施しました)。

Railsの理解


何も無いところからアプリケーションを作成するのではなく、ひな型を自動で作成してそこから必要な個所を修正していくものだと最初に説明されています。RailsRubyフレームワークということなので、基本的な構成はすでに豊富に用意されているということなんでしょうね。

また「MVC(モデル/ビュー/コントローラ)」という単語もよく登場します。
こちらの概念についても図で説明されているのでペタリ。
RailsにおけるMVC(モデル/ビュー/コントローラ) - Ruby on Rails入門

MVC」でGoogle画像検索すると同じような図が沢山出てきます。
自分なりに分かりやすい図にしてみました。

f:id:moko_03_25:20190504163515p:plain

MVCについて、具体的にどう制御していくかはこちらから徐々に入っていくようです。
コントローラとアクションの作成とルーティングの設定 - Ruby on Rails入門


とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた3:MVCの一連の流れ - ゲームエフェクトデザイナーのブログ (新)

Rubyを始めてみた1:基本構文

MySQLSQLなどデータベース周りやサーバー構築周りを勉強中ですが、動機としてはC#で作ったタスク管理アプリを複数人で使えるようにしたいというのが1つ。

こちらを実現するには、以下のようなあたりを勉強する必要がありそうだなと。

・アカウント登録と管理、ログインやログアウトの仕組み
・アカウントごとのタスク管理アプリに対するパーミッションなどの設定や管理
・サーバー上にデータベースを構築してタスク管理アプリとやり取り
 (タスクの複数アカウントからのリアルタイムでの編集が可能に)
・ネットワークやセキュリティの知識

それだけではなく、仕事でも大量のアセットの情報をデータベースで管理して、ウェブサービス上で情報を表示したり何かしら集計したりといったようなことにも知識を活かせたらという思いもあります。

ただし仕事だとプログラマさんにお願いして実現してもらえたりするので、そういった知識を得ておくことでプログラマさんとのコミュニケーションがスムーズになれば良いなという感じです。

それから、ウェブアプリを作ってみたいという思いがジワジワと増してきています。

というのもTwitterのモーメントを試してみたらとても使い辛い上に100件超えたら古いものから消えていくという仕様を耳にしたりして、これ以上使う気になれなかったりしたので、自分にとって使いやすい形でカテゴリ別にフィルタできる過去ツイート閲覧アプリが作りたいといった感じです。

ツイートにタグを付与できてタグでフィルタして一覧できたらそれで十分という感じで。

内部的にはツイートの投稿IDと、あらかじめ登録したタグの紐付けをデータベースで管理して、諸々の操作をブラウザ上で完結できたら良いなあと。

サイトのイメージとしてはTwilogのような感じが理想です。
Twilog - Twitterのつぶやきをブログ形式で保存


もう少し細かく要件を書き出すと以下のような感じになるかと思います。

●ブラウザ上でTwitterのアカウントIDを指定してタイムラインを一覧できる
 Twilogのように年/月/日を指定してリストアップできる
 Twitter公式アプリのように画像や動画のサムネイルも表示したい

●ブラウザ上でタグの新規登録、削除、リネームが行える

●タグをデータベースのテーブルで管理

●ブラウザ上でTwitterの一覧から、指定ツイートにタグを紐付けられる
 タグの付与(複数可)と解除が行える

●ツイートの投稿IDとタグIDの紐付けをデータベースのテーブルで管理する

●ブラウザ上でタイムラインを一覧する際にタグを指定してフィルタリングができる

でもって最終的にはiPhoneアプリ化して通勤時などの隙間時間にタグ付与作業ができたらいいなあと。実現に何年かかるか分かりませんが。。

具体的に習得が必要な要素として、Ruby/PHP/Pythonなどによるアプリの実装周り、HTML/CSS/JavaScriptなどのブラウザでの表示周り、サーバーとの通信、あと以前軽くTwitter公式APIを試しましたがもっとちゃんと色々調べないといけなさそうだなと思うと、こりゃ大変そうですね。

それから、RubyPHPPythonのどちらが良いのだろうと思った際に、アーティストとしては仕事でもストレートに役に立つPythonでいきたいところですが、ウェブアプリを作る解説の多さとライブラリの充実面で言えばRubyPHPという感じなのでしょうか。

※実は最初にPythonでウェブアプリ開発をやってみたいと思って試そうとしたのですが、Python3 + Vagrant + Django の環境構築の時点でうまく動作せず原因が分からなくなっていきなり頓挫したという経緯もあります‥(もうちょい調べれば進めたかもですが気分転換のため一旦ストップしました)

ウェブエンジニアな方にご相談したところRubyRailsフレームワークがおすすめと教えていただいたこともあり、ひとまずRubyを軽く触ってみたいと思いました。

環境構築


まずRubyのDevkit付きインストーラーをDLして実行します。
Railsを使いたい場合はDevkit付きになるようです。

こちらの記事を参考にさせていただきました。
Rubyのダウンロードとインストール | Ruby入門 | RubyLife

ちなみにこの記事の時点で最新の「Ruby 2.6.3p62」をインストールしました。

そもそもこちらのサイト、チュートリアル記事が非常に充実しています。。
Ruby on Rails 入門」シリーズではウェブアプリを作成する手順が学べるようです。

そして Rails のインストールも同サイトの記事を参考にさせていただきました。
Railsをインストールする | Ruby on Rails入門 | RubyLife

この記事の時点でインストールした Rails のバージョンは「Rails 5.2.3」になります。

その後に進めた学習内容


同サイトの「Ruby入門」の記事を順に見ていきました。
https://www.javadrive.jp/rails/

7年前の記事のようなので今のバージョンでは書かれている通りにいかない箇所も色々とありますが、そのあたりは全て解決方法をメモっています。

他にはドットインストールの「Ruby入門(全26回)」を進めるのも良いと思います。
https://dotinstall.com/lessons/basic_ruby_v3

Rubyのリファレンスマニュアルはこちら。
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル (Ruby 2.6.0)

以下は軽いメモ。

Rubyのファイルは「~~.rb」
コマンドプロンプトで「ruby ファイル名」で実行
・処理の最後に「;」は無くてOKだし入れても良い
・1行コメントは「#」、複数行は「=begin」と「=end」で括る
・「#! ruby ~~」で始めるとコマンドラインプションの指定が可能
・日本語を表示するなら「#! ruby -Ks」を先頭に記述しておくと良い(Shift-JIS指定)
・定数は大文字で宣言

基本構文はPythonと共通点が多いですね。

ちなみに文字コード関連の記事はうまくいったりしかなかったりしました。
上記リファレンスマニュアルによると2.6.0以降はエンコーディング周りは色々と変わったようで「$KCODEは廃止されました」とあります。。
多言語化 (Ruby 2.6.0)

クラスの定義

class クラス名 ※先頭は大文字で書くと良い
 ~~
end


クラスの定義(いわゆるコンストラクタがある場合)

class クラス名 ※先頭は大文字で書くと良い
 def initialize()
  ~~
 end
 ~~
end


メソッドの定義

def メソッド名(引数1, 引数2, ...) ※先頭は小文字で書くと良い
 ~~
end


モジュールの定義

module モジュール名 ※先頭は大文字で書くと良い
 ~~
end


とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた2:Ruby on Rails 導入 - ゲームエフェクトデザイナーのブログ (新)

サーバー構築を試してみた:AWS

サーバーを構築してみたいと思ってドットインストールのレッスンを色々と進めてきました。

サーバー構築を試してみた:AWS Clou9
サーバー構築を試してみた:ローカルサーバーの構築1
サーバー構築を試してみた:ローカルサーバーの構築2

お次は「AWSAmazon Web Services)入門(全17回)」をやってみました。

https://dotinstall.com/lessons/basic_aws

これまではPHPとかRubyといった開発環境を色々インストールして、ちょこっと試してみたら終わりという感じのシンプルなものでしたが、今回は「ファイアウォール」とか「SSH」とか「データベース立ち上げ」とか「ロードバランサー」とか、これぞサーバー構築!といった感じの単語が目次にあるため期待しつつ開始。

出てくる用語


EC2(Elastic Compute Cloud)
 仮想サーバーのこと

RDS(Relational Database Service)
 データベースに特化したサービス

S3(Simple Storage Service)
 ファイルを色々とアップできるストレージサービス

EBS(Elastic Block Store)
 仮想サーバーを作成した際に作成されるボリューム

レクチャーを進めていった際のメモ:インスタンス作成


まず最初のアカウント取得とリージョンを設定したりは同じドットインストールの「AWS Cloud9 入門」のレクチャーで解説されているのでそちらが参考になるかと思います。

インスタンスを立ち上げる手順では、レクチャー動画の時点とはAWSのサイトのデザインがかなり変わっていますが、メニューの「サービス」から「EC2」を選んで「インスタンスを作成」ボタンを押せばOKです。

Linuxディストリビューションを選択する手順では、現在は「Amazon Linux 2 AMI」と「Amazon Linux AMI」の2種類から選べますが、「2」の方は新しい代わりにそれまでの設定方法が色々違っているっぽいので後者の方が良さそうです。

インスタンスタイプは無料枠で選べるのが「現行世代」で1つしか無いので一択ですね。。

動画で「Availability Zone」の選択手順がありますが、サイト右下の「次の手順:インスタンスの詳細の設定」を押した先のサブネットの項目で「ap-northeast-1a」を選ぶことができました。

この辺り軽くググった時に解説されている記事をペタリ。

それからTermination Protectionについての手順は「シャットダウン動作」「削除保護の有効化」という項目がそれにあたる感じでしょうか。

キーペアの入力の工程は今のサイトでは後から登場します。

セキュリティグループの設定は名前を一応レクチャー動画に合わせて「quick-start-1」に変えて、ルールも動画と同じくHTTPを追加しました。

・タイプ SSH   | ポート 22 | ソース 0.0.0.0/0
・タイプ HTTP | ポート 80 | ソース 0.0.0.0/0

最後にキーペアを「新しく作成」して、レクチャー動画と同じく「taguchi」と入力して作成して、キーペアのファイルもDLしておきました。

その後インスタンス作成が完了するとステータスが確認できるページに飛びますが、AWS Cloud9 のレクチャーも行っていた場合はそちらも並んでいるかと思います。

セキュリティグループの確認の手順は「説明」タブ内の「セキュリティグループ」の項目にある「インバウンドルールの表示」というリンクをクリックするとポップアップ表示されて確認できます。

Instance Actionsに関して「Terminate」はインスタンスを削除してしまうので注意と説明されていますが、ページ上部の「アクション」プルダウン内の「インスタンスの状態>終了」がそれにあたる感じでしょうか。削除とは書かれていないので、うっかり停止しようとして終了を選んでしまいそうですね。。

レクチャーを進めていった際のメモ:インスタンスへの接続


レッスン#05の動画ではここでいきなりターミナルみたいなものでコマンドを打ち込み始めますが、どうやらSSHでサーバーに接続するためのクライアントアプリを何かしら使う必要があるようです。

Windowsでローカルサーバー構築のレクチャーにも登場した「PuTTY」を使うのがポピュラーなようなので 、こちらをインストールして使うのが良さそうです。

手順について解説されている公式ドキュメントのURLを貼り付けておきます。

まずは「PuTTY」本体ではなくスタートメニューから「PuTTYgen」を起動して、プライベートキーの変換を先に行っておく必要があるようです。

上記ドキュメントの手順通りに進めて、あらかじめ作成しておいた「~~.pem」ファイルをロードして、同じ名前で「~~.ppk」ファイルを出力する流れになります。

次に「PuTTY」で設定を行いますが「Host Name (or IP address)」に何を入力すれば良いのかというと、Amazon Linuxなのでユーザー名は「ec2-user」で@の後ろのパブリックDNSネームはAWSインスタンスのページの説明タブ内の「パブリックDNS (IPv4)」の項目内容をまるっとコピペすればOKです。

つまり下記のような感じになります。

ec2-user@ec2-54-ほにゃらら.ap-northeast-1.compute.amazonaws.com

成功するとコマンドプロンプトのような、PuTTYの真っ黒いウインドウが表示されて、コマンドを受け付ける状態になります。

そうしたらレクチャー#05 の 1分11秒 あたりまで進んだということになるかと思います。

その後「yum update」コマンドでアップデートしますが、完了後にインスタンスを再起動した方が良いようなのでAWSのページから行いました。そうするとPuTTYからの接続も再度行う必要があります。

レクチャーを進めていった際のメモ:htmlの作成


レッスン#06でhtmlを作成して試す工程がありますが、AWS Cloud9 のレクチャーで登場した‥「i」キーで編集モードに移って「esc」キーを押して「:wq」を入力、Enterキーで編集完了‥という流れで行う必要があります。

私の方でも無事、ブラウザからアクセスして「Hello!」の表示を確認できました。

その後、IPアドレスを作成してインスタンスに関連付けして、試しに手元のiPhoneのブラウザでアクセスできるのも確認。ちょっと感動。。

サーバーのスペックを上げるのも、一度インスタンスを停止してプルダウンからスペックを選んでまたインスタンスを再開するだけというお手軽操作で驚きました。。

レクチャーを進めていった際のメモ:データベースの作成と接続


データベースを作成後のステータス確認画面が、EC2のインスタンスのページ構成とはまた少し違いますね。スペック変更はデータベースの詳細ページの右上にある「変更」ボタンを押すと行えるのが確認できました。

次に「DB Security Group」の設定の工程ですが、データベース「mydbinstance」のページで「接続とセキュリティ」の項目を確認すると「VPC セキュリティグループ」にリンクがあり、すでに関連付けされているのでこちらで良いのでしょうか‥

しかしPuTTYで接続を試みて、パスワードを聞かれますが最初に設定したパスワードを入力してEnterを押すと、しばらく応答が無くて不安になってきたあたりで接続できませんでしたとエラーが表示されてしまいます。

その後に色々と試してうまくいったのでメモしておきます。

まず今起動中のEC2のインスタンスのページを表示して「説明」タブの「セキュリティグループ」の quick-start1のリンク先に飛んで、グループID(sg-で始まる内容)を適当なテキストエディタにでもコピペしておきます。

次に、AWSのデータベース「mydbinstance」のページの「接続とセキュリティ」タブを開いてページ下の方を見ると「セキュリティグループのルール」という項目があるので「rds-launch-wizard(sg-~~)」のリンクを開きます。

セキュリティグループが表示されたら「インバウンド」タブを開いて「編集」ボタンを押し、ソースのアドレスを先ほどコピペしておいたグループIDを入力します。

インバウンド

タイプ:MYSQL/Aurora
プロトコルTCP
ポート範囲:3306
ソース:sg-ほにゃらら~~


これでOKです。
PuTTYで以下のようにコマンドを入力します。

mysql -h エンドポイントをコピペ -P 3306 -u dbuser -p dotinstall


そしてパスワードを聞かれたら、データベース作成時に最初に設定したパスワードを入力して無事に接続できました。その後の「show databases;」でもちゃんと表示されました。

 

残りのレクチャーは、サーバーを複製する形で増設して、ロードバランサー(アクセスを分散したりできる)を設置してみたり、ストレージサービスのS3を使って画像をアップしたりウェブページをアップしたりといった内容になります。

とりあえず、何となくサーバー構築の流れが以前よりもう少しイメージを掴めたので行ってみてとても良かったです。

余談


ちなみに余談になりますが、こういった事例を教えていただいたことがあります。

とても恐ろしい‥!

こちらのようにシークレットキーを公開とかはしていませんが、念のためチュートリアルを終えた後はEC2インスタンスを削除して、料金が発生したらメールで通知があるよう設定しました。。

あと気になるのは無料期間が終わった時の料金ですよね。
こんな記事も。

月8000円は払えないですね。。

何かウェブアプリを作って公開する際のサーバーは自宅ではなくレンタルが良いと思っているので、色々検討してみたいと思います。

Jenkinsを試してみた + バッチファイル関連

ゲーム開発で何かを自動で実行して通知をもらうような際にJenkinsジェンキンス)とやらが使われている‥というのは知ってはいましたが、具体的にどんな感じで設定するのかなど全く知らなかったので、プログラマさんと会話できるようとりあえずちょこっと触ってみました。

ググっていくつか出てきた中ではこちらの記事が入門に良いチュートリアルになっていて、とてもお手軽に試すことができました。

ただしJenkinsをインストールした直後に開くウェブページが表示されません。
(Windows10環境です)

こちらの記事を参考にアドレスを「127.0.0.1:8000」に変えたらいけました。

残りの手順については特に問題もなくいけました。

Windowsのタスクスケジューラみたいな感じで登録していけるんですね。
ブラウザで設定できてお手軽で、メニューも日本語表記なので安心。。

とりあえず触ってみたところで‥自分の場合は何に使ったものか。。

タスクスケジューラについて


ついでにタスクスケジューラにタスクをバッチファイルで追加する方法も調べてみました。

というのも、以前タスクスケジューラへの登録をマニュアルを書いてチームメンバーにお願いしたことがありましたが、どう考えてもバッチファイルで登録してもらう方が良いですよね。。

次に同じような場面があったらこちらを試してみたいと思います。

ちなみにC#で登録したい場合に、タスクスケジューラから一旦設定をエクスポートして生成されたxmlを使う方法(なるほど~!)が良さそうだったのでこちらもペタリ。

 

バッチファイル作成について


ついでにバッチファイル関連の良さげな記事があったのでこちらもペタリ。

インターネット用語について調べた時のメモ

ざっと一覧にしています。

これらをさらに深く調べていけば良さそうです。

●サーバー

 ネットワークを介してサービスを提供するコンピュータ、またはソフト
 ホストとも言う
 管理者 Administrator(アドミニストレータ
 ・メールサーバー
 ・Webサーバー
 ・アプリケーションサーバ
 ・ファイルサーバー
 ・プリントサーバー

●クライアント
 サーバーに対して、サービスを利用するコンピュータ、またはソフト
 ・LANクライアント
 ・TCP/IPクライアント
 ・シンクライアント

●クライアント-サーバモデル(C/S)
 クライアントとサーバーを分離するモデル
 ・DNS
 ・DHCP

P2Pモデル(ピア・ツー・ピア)

IPアドレス
 ネットワークの世界での住所 送信先
 現在使われているのは「IPv4」方式 0~255の数字x4つ並んだもの
 今はIPv6へ移行する流れ
 ・プライベートアドレス
  学校や企業、家庭内などで端末を特定するもの
  クラスCの192.168.n.nで始まるアドレスを多く使用する
 ・グローバルアドレス
  インターネット上で端末を特定するもの
  一般的にインターネットサービスプロバイダによって割り当てられる
  大抵のプロバイダでは自動的にグローバルアドレスを割り当てる

MACアドレス
 IPアドレスが最終的な送信先なのに対してMACアドレスは次の送信先
 様々なルータ等を経由するため、次々と中身が変わる

通信プロトコル
 ネットワーク上での通信に関する規約を定めたもの
 「通信規約」や「通信手順」と訳す
 プロトコルって何?
 https://www.wanichan.com/beginner/pc/network/net05.htm
・HTTPプロトコル
 Webサーバーと私たちのパソコン(クライアント)とのデータのやり取りをする
 http://~~
 ・ドメイン(Domain Name)
  IPアドレスが数字の羅列なので分かりやすく名前を付けたもの
 ・DNS(Domain Name System)サーバー
  IPアドレスと紐付くドメインを管理するサーバー
TCP/IP
 TCP は Transmission Control Protocol の略で、伝道制御プロトコル
 IP  は Internet Protocol の略で、ネットワーク間プロトコル
 データを他の離れたパソコンに送る場合、小分けにする その単位が「パケット」
 沢山のパケットをバラバラに送る それがIP
 バラバラのパケットの集まりを検分して全て揃ってるか確かめたり順番通りに並ばせるのがTCP
FTP(ファイル・トランスファープロトコル
 ネットワークでファイルの転送を行うための通信プロトコルの1つ

●サーバー
「サービスや機能を提供する側のコンピュータ」

DHCPサーバー
 IPアドレスを割り当てる仕事をするコンピュータ
 DHCPは「コンピュータにIPアドレスを自動割り当てする仕組み」

●インターネット
 全世界を繋ぐ巨大なTCP/IPネットワーク
 多数のネットワーク(サブネット)に分けて管理される
 ネットワークアドレスは、これらのネットワークを識別するためのアドレス
 各ネットワーク(インターネット・サービス・プロバイダなど)に決まった範囲が割り当てられている
 日本では日本ネットワークインフォメーションセンター (JPNIC) によって、ネットワークアドレスが一意になるよう管理されている

●サブネット
 巨大なネットワークに対してある程度小さな規模に分けた多数のネットワーク

サブネットマスク
 IPアドレスのうちネットワークアドレスとホストアドレスを識別するための数値
 11111111 11111111 11111111 00000000 の場合
 255.255.255.0 または 0xFFFFFF00 と表す
 
●ルートテーブル / ルーティングテーブル
 ルーターやネットワーク接続されたコンピュータが持つ、
 個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造
 荷物を届ける際の地図のようなイメージ

ゲートウェイ
 コンピュータネットワークをプロトコルの異なるネットワークと
 接続するためのネットワークノード

●プロキシ(Proxy)/ プロキシサーバー
 ”代理”という意味
 自分のパソコンに変わってWebサイトにアクセスしてくれるサーバーのこと
 高速なアクセスや安全な通信などを確保するための中継サーバー

ちなみに‥

「サーバー」なのか「サーバ」なのか迷うところで、基本的に「-」で伸ばしたくない派なのですが、新聞記者やライターでは「サーバー」が標準ということでそちらに合わせています。。

サーバー構築を試してみた:ローカルサーバーの構築2

前回、古いWindowsマシンでフォルダ共有を試してみて、それだけでヒーヒー言ってた訳ですが、お次にまたドットインストールで「ローカル開発環境の構築 [Windows編](全14回)」をやってみました。
https://dotinstall.com/lessons/basic_localdev_win_v2

ローカルサーバーを構築する方法は色々あるそうですが、このレクチャーでは VirtualBox を使った仮想環境にLinuxCentOSをインストールしてサーバー構築する方法を学べるということでした。

レクチャー動画に沿ってインストールしたもの


レクチャー動画のものからバージョンが色々上がっているので、メモしておきます。

VirtualBox 6.0.6
Vagrant 2.2.4
CentOS 6.8?
Putty 0.71 SSHを使ってサーバーにリモート接続するためのツール?
・git + アプリケーション設定用のスクリプトをgitからDL
 実行すると勝手に色々インストールしてくれるようです
 ・Ruby 2.3.1?
 ・Python 3.5.2(libselinux-pyton)?
 ・Remi(Python REMoteインタフェースライブラリ)?
 ・Man?
 ・Apache
 ・gd-last?
 ・PHP
 ・MySQL
 ・Node.js?
 ・Npm(Node Package Manager)?
CyberDuck 6.9.4 ファイル転送ツール

Puttyは動画内のURL先と少し違いますがこちらからDLできます。

こちらのレクチャーの感想


まず、ローカルサーバー構築について図を使って分かりやすく解説されていて、それがとても良かったです。

ただしvagrantでの設定からは動画の通りにコマンドをコピペして実行していくだけなので、どのタイミングで何がインストールされているのか、どういった設定がされているのかなどの説明があまり無く、自分で調べないことには得られるものが少ないレクチャーになってる感じはしました。

例えば、どのタイミングでCentOSがインストールされたか分かりませんでした。
VagrantFileを生成する「vagrant init bento/centos-6.8」のタイミングなんでしょうね。
ググってみると「vagrant box add centos~~」でインストールするのが通例なようですが、VagrantFile生成と同時に行っているっぽい?このあたりはまた別途ちゃんと調べる必要がありそうです。

また、MyCentOSフォルダ内へ移動して環境構築していきますが、実際に仮想環境としてインストールされていっているファイルがどこに存在するのかなど何も説明されないので結構モヤモヤします。VMについてもう少し概要説明が欲しいと思いました。。

ググって調べれば良いだけの話かも知れませんが、とりあえず私の場合はどこに何のファイルが増えたのか気になったので「DiskInfo3」を使ってファイル容量の占有率が増えているフォルダをチェックしてみて、下記のあたりかなという感じでした。

下記の場所にCentOSのvmdkファイル 280MB が存在しました。
ググると「仮想マシンを構成するファイル」だそうです。
C:\Users\ユーザー名\.vagrant.d\boxes\bento-VAGRANTSLASH-centos-6.8

こちらにも同じくCentOSのvmdkファイル 3.28GB(!)が存在しました。
色々とインストールされたものはこちらに集約されている感じでしょうか。
全て1ファイルになるのですね。。
C:\Users\ユーザー名\VirtualBox VMs\MyCentOS_default_~~~~


それにしてもローカルサーバー環境構築するのも、仮想環境を起動したり終了したり色々とツールをまたいだりして煩雑だし大変ですね。AWS Cloud9 が楽というのがとてもよく分かりました。。

それから注意がひとつあり、ドットインストールでの手順ではWindows7環境で試したらうまくいかず、WIndows10環境で試したらすんなりといきました。

そのあたりもメモしておきたいと思います。

Windows7で試した際に起こったエラーについて


レッスンはwindows10環境で解説されていますが、実は最初にwindows7環境で試しました。

すると私の場合「#05 仮想マシンを立ち上げよう」で途中から進めなくなりました。
PowerShellのバージョンが2だけど最低3以上にしてくれとメッセージが出ていました。

しかしそのためにはまず.NETのバージョンを上げる必要があるようです。

.NET Framework をv4.5以上にバージョンアップする
Windows PowerShell をv3以上にバージョンアップする

こちらの記事を頼りにインストールしました。

Windows Management Framwork は 5.1 がリリースされているようで、先ほどの記事のリンク先からもう1つ飛ばないといけません。つまるところ、こちらからDLすることになるようです。

終了時にPCの再起動を求められるのでご注意。

しかしその後の「vagrant up」のコマンド実行中にタイムアウトしたと表示され失敗します。

ドットインストールの動画下部の補足情報を読むと「ご利用のパソコンにて仮想化支援機能が無効になっていることが原因の可能性があります」ということで、解決策について補足されています。

具体的にはBIOSの設定を変えたりする必要がある様子。

そこで一旦Windows7環境で構築するのをやめました。

vagrant-vbguest」プラグインのインストールを取り消したい場合


レッスン#05で「vagrant-vbguest」プラグインのインストールが説明されつつもテロップで「こちらは行わないでください」と表示されますが、うっかりインストールしてしまいました。

肝心の何故インストールが不要なのかの説明が無いのでモヤっとしますが‥

その場合は‥

vagrant plugin uninstall vagrant-vbguest


こちらのコマンドでアンインストールできるようです。

レッスン途中で中断して再開する場合


Windowsを再起動した場合は、Vagrantの起動からまた行います。
レッスン#05の下記のコマンドをPowerShellでもう一度なぞればOKだと思います。

cd MyVagrant

cd MyCentOS

vagrant up


単純にPowerShellを落としたもののまた再開したい場合などは、まだVagrantが起動中の可能性があるので、ステータスを確認します。

vagrant status


こちらで「The VM is running.~~~」と表示されれば起動しています。
VM は Virtual Machine(仮想マシン)の略のようですね。

ちなみにレクチャー#08の最後に「exec $SHELL -1」を実行すると、レクチャー動画とは違ってそのままPuTTYが終了してしまいました。一応そのまま最後までレクチャーを進めることはできました。。

レッスン#11で「php -S 192.168.33.10:8000」と入力して失敗する


こちらは「-S」が小文字が原因でした。。 

色々なツール


PuTTY

Cyberduck
一昔前で言うところの「FFFTP」のようです。
サーバー上のファイルを編集しようとすると勝手にLocal\TempにDLして開き、保存すれば勝手にサーバー上のファイルを更新してくれているようです。

Atom
動画の途中からAtomを使った解説になるため、インストールしておくと良いかと思います。

以上です。

サーバー構築を試してみた:ローカルサーバーの構築1

前回、ドットインストールで「サーバー環境を作れるようになろう」の項目で「AWS Cloud9 入門(全11回)」をざっと試してみましたが、次にWindowsでのローカルサーバー構築を試してみたいと思いました。

そこで思い出したのですが、古いデスクトップマシンを処分しようと思っていたものの手続きが面倒で廊下に置いたままになっていたので、せっかくのGWなのでこちらのマシンを使ってローカルサーバーを構築してみたいと思いました。

Windows環境で試してみた後にLinuxのインストールも試せるなあと思いつつ。

サーバー構築については全く何も知識が無いので、ググってみて手当たり次第に試していくスタイルでいこうかといった感じです。。

そして、まずはWindowsを綺麗な状態にしてフォルダの共有から試していきました。

古いマシンにWindows7を再インストールしてみた


こちらの記事を参考にしました。

Windows7のインストールDVDがすぐ見つかり、30分ほどで終わりました。

次にWindowsアップデートを行いました。

念のためバックアップとして復元ポイントを作成しようかなと思ったのですが、そのままWindows10にアップグレードすることに。

Windows7 を Windows10 にアップグレード


こちらの記事を参考にしました。

あらかじめWindows7をインストールした時点でライセンス認証を行っておかないといけなかったようで、アップグレード途中でプロダクトキーを求められたのでWindows7のプロダクトキーを入力するも弾かれる事態に陥り、ライセンス認証してから再度アップグレードをやり直すハメになりました。。

ライセンス認証してからだとそのまますんなりと進みました。

インストール完了した時点で、バックアップのためシステムの復元ポイントを作成しておくと良さそうです。

 

古いWindowsマシンのフォルダを共有設定にしてみた


Windows10で特定のフォルダに他のマシンからアクセス可能なよう共有設定を行う方法は、大きく分けて3種類あるようです。

・ホームグループ機能を使う
・パブリックフォルダを使う
・フォルダやファイルを個別に共有設定を行う

Windows7でもネットワークの種類を「家庭内ネットワーク」に設定すると「ホームグループ」という機能を使って家庭内の複数のマシン同士でのファイル共有を簡単に行えるようです。今まで気にしたことも無かったので今更認識した次第です。。
手順としては、双方のマシンでホームグループ機能をONにするだけですが、先にONにしたマシンでは専用のパスワードが発行されるので、それを他のマシンで入力するだけという流れでお手軽な印象でした。

また、Windows7 OSの再インストールを行った際にも途中でホームグループを設定する過程がありました。

ただしWindows10の最新バージョンではホームグループが削除された模様?

一応ホームグループについて解説されている記事も貼り付けておきます。

【山田祥平のWindows 7カウントダウン】仕事用PCを自宅で安全に使えるホームグループ - PC Watch

あと、単純にファイルやフォルダを共有設定にする方法については、こちらの記事を参考にしましたが、色々とややこしかったのでそのあたりメモっておきたいと思います。

実際の流れは以下のような感じ。

まず共有したい側のマシンでは Windowsキー + I で設定ウインドウを表示して「ネットワークと共有センター>共有の詳細設定」を開きます。

「ゲストまたはパブリック(現在のプロファイル)」の設定を下記のように設定。
・ネットワーク探索を有効にする ON
・ファイルとプリンターの共有を有効にする ON

「すべてのネットワーク」の設定は下記のようになっているのを確認。
・パスワード保護共有を有効にする ON

次に、共有したいフォルダを右クリックして「プロパティ>共有タブ>詳細な共有」で「このフォルダーを共有する」をONに設定します。

他マシンからいざアクセス!

共有したいフォルダに上記のように設定すると、フォルダのプロパティにネットワークパスが表示されるので、こちらのパスを別のアクセスしたい方のマシンから「ファイル名を指定して実行」欄に入力して実行すればOK(他にも方法はありますがこちらの方が実行した感があって少し安心。アクセスにかなり待たされて不安になってくるため)。

ユーザー名とパスワードの入力

繋がるとユーザー名とパスワードの入力を求められ、入力が通ればアクセス可能になります。

ただしこの時入力するユーザー名はフォルダを共有したマシンに登録されているユーザー名なので注意です。今まで意識したことも無かったですが、アクセス先のマシンのユーザーとしてリモートでアクセスする感じなんですね。

なので、管理者権限があるメインユーザーでアクセスする訳ではない場合、共有したいフォルダに対してフルコントロール権限をあらかじめ与えておかないといけないようです。後から追加した別のユーザーだとデフォルト設定ではフォルダに対してフルコントロールではなく読み取り専用になっているかと思います。

その場合、共有フォルダのプロパティ>共有タブ>詳細な共有>アクセス許可でEveryoneをフルコントロールにしたりしてもダメで、セキュリティタブの方でユーザーを選択>編集ボタンでフルコントロールにチェックを入れたらOKでした。

こういったユーザーのアクセス権限と他マシンからのアクセスに関する基礎知識が全く無かったため、色々と混乱しましたがおかげで少し分かってきました。。

アクセス状況を確認する方法

スタートメニューを右クリック>コンピュータの管理 を開いて、システムツール>共有フォルダ>セッションや開いているフォルダで、現在他のマシンからのアクセスがあれば情報が表示されます。

二重アクセスでエラーが出た場合

他のマシンからアクセスを試みてユーザーとパスワードを入力した際に、エラーダイアログが表示され「同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。」と言われた場合‥

一旦、フォルダを共有しているマシンを再起動したらいけました。

もしくはこちらの記事を参考にコマンドプロンプトやパワーシェルで接続を切ると良いかも。

たったこれだけのために色々調べて疲れました。。

Windowsでローカルサーバーを立てる


こちらの記事を読んでみました。

なるほど、かなりお手軽ですね!
試してはいませんがとりあえずメモということで。。

自宅サーバーは出火の原因に?


古いマシンでサーバー構築する方法をググっていると、安いノートPCをサーバー専用機にするといった記事もちょこちょこ出てきます。しかし以前、24時間稼働させ続けていたらノートPCから出火して部屋が燃えたという記事を読んだのを思い出しました。

こちらです。

恐ろしい話です。

私はよくマシンを付けっぱなしで寝たり会社に行ったりすることが多いですが、こまめに消そうと思うのでした。そしてやっぱり仮想サーバーをレンタルして試すのが良いなとあらためて思うのでした。

ローカルサーバー構築をやってみた続きの記事はこちら。
http://effect.hatenablog.com/entry/2019/05/02/000816

サーバー構築を試してみた:AWS Cloud9

サーバー構築について知っておきたいと思っていたのですが、ひとまずドットインストールで「サーバー環境を作れるようになろう」の項目を片っ端から試していくことにしました。

まずは「AWS Cloud9 入門(全11回)」から。
https://dotinstall.com/lessons/basic_c9_v2

設定と更新を繰り返すだけなのでサクサク進み、2時間もかからず終わる感じです。

ちなみにこちら、月額980円のプレミアム会員限定のレクチャーになります。
プレミアム会員限定のレクチャーはかなり大量にあり、中級者向けのものは基本的にプレミアム会員向けコンテンツになるようです。特に短期集中的に学習する場合など、利用すると良いかと思います。

AWS Cloud9 とは


AWSAmazon Web Services)が提供するサービスのひとつで、ブラウザだけで開発・表示・デバッグが行えるクラウド開発環境だそうです。
なるほど、ローカル環境に左右されないし汚さないしで良いですね!

しかもウェブアプリ開発に必要な環境があらかじめインストールされた状態のようです。
これは楽だ。。

とは言えバージョンが古かったりするようなので、各種環境のバージョンアップがドットインストールのレクチャーの大半を占めている感じでした。

でもって、まずはAWSのアカウントを取得します。
ドットインストールのレッスンはAWSのアカウント取得12ヶ月間の無料範囲内で行えるようです。

アカウント取得最後にクレジットカードの入力を求められ、その際にエラーが出て戻ることも進めることもできなくなりましたが、その時点でログインはできたため、一旦ログインしてからクレジットカード情報を修正すれば大丈夫でした。

作業準備周りの軽いメモ


AWSで作業用のグループを作成、ユーザーを作成。

Cloud9のページにジャンプして新しく環境を作成していきます。

近年デスクトップ解像度が増していく中でエディタの文字が小さくて困ることが増えてきているのですが、PyCharmとか新しい環境を導入する度にフォントサイズをまず大きくすることから始めるという感じで。でもCloud9はブラウザベースなのでCtrl + 中ボタンドラッグでUI全体のフォントサイズを自由に変更できるのが地味ながら楽で良いですね!

以下はちょっとしたメモ。

コンソールのクリア $ clear またはCtrl + L(便利!)

ファイルの編集
・viコマンドで編集、iキーでINSERTモードにして編集
・編集後は、Escキーを押して「:wq」で終了
・編集後の反映は source コマンド

UNIXコマンドの習得レクチャーも全24回でドットインストールに用意されています。

https://dotinstall.com/lessons/basic_unix_v2


Cloud9 のその他のショートカットについてはこちらでまとめられています。

 

PHPHello World


PHPファイルを作成

$ touch index.php


ファイルが生成されたのがツリー上で確認できたらダブルクリックして表示。
コードを記述したら、File>Saveで保存して「Run」ボタンを押してビルド。
その後にPreviewPreview Running Applicationで表示。

その後、Ctrl + C でビルドインサーバーが止まるのでタブを削除
最後に今テストしたファイルを削除(removeコマンド)

$ rm index.php または $ rm main.py

 

PythonHello World


Pythonファイルを作成

$ touch main.py


ちなみにPythonをターミナルで実行する場合はこちら。

$ python main.py


最後に今テストしたファイルを削除(removeコマンド)

$ rm main.py


Node.jsとRubyも同様に動画の通りに試してみました。
Rubyでうまくいかない部分は、ページ下部の補足通りにカバーしてうまくいきました。

その他


Cloud9 は NVM でバージョン管理しているとのこと。
ほうほう、こちらのことでしょうか。


レクチャーを一通り終えてみて‥

動画の通りに設定しただけなので流れがなんとなく分かったのみですね。。
ただ、思いのほか楽だということは分かりました。

2019.5.2 追記:
ドットインストールではAWSを利用したレクチャーも別途用意されていて、後ほどそちらも実施してみたら、クラウドでのサーバー環境構築と設定周りについてより理解が深まりました。こちらも併せて試してみることをおすすめしますっ!

ローカルサーバー環境構築を試してみた記事はこちら。

その1:http://effect.hatenablog.com/entry/2019/05/01/112509
その2:http://effect.hatenablog.com/entry/2019/05/02/000816

MySQL + SQLの概要メモ

データベースからSQLの文法でMySQLにクエリを投げて検索結果を取得する際のメモ。

ちなみに入門としては、Udemyのこちらの動画を購入して学びました。

4000人以上が購入していてとても高評価。
142本の動画は計7時間なので、休日にがっつりやれば1~2日で終われるボリュームです。
私も土日の2日間で終わりました。

半分くらいまでは簡単な内容をとても丁寧に解説されていて、素晴らしいと思う反面「書籍を買った方が良かったのでは」と不安に思い始めましたが、テーブルの結合あたりから徐々にややこしくなっていくので丁寧な解説がとてもありがたかったです。

ちなみにUdemyの再生速度は大体いつも1.25xで再生しています。

MySQLSQL とは?

MySQLはデータベースを管理するシステムの1つ
 オープンソースで無料で使える
 コマンドプロンプトから操作できる
 GUIで操作したい場合に「MySQL Workbench」といったアプリケーションもある
 https://www.mysql.com/jp/products/workbench/

SQLはデータベースを定義したり扱うための言語
 国際規格として標準化されている

MySQLインストール時の注意

インストール時に管理者のパスワードを決める工程がありますが、しばらく後に忘れてしまったりすると困ることになるのでメモっておくのをオススメします。。

忘れた場合の対処方法も色々な方が記事にされていてありがたいです。


SQLの構文

小文字大文字どちらでもOKだけど、今時は全て小文字で書く場合が多い
文末にセミコロン「;」
文字列はシングルクォーテーション「'」で囲む
コメントは「-- 」または「/*~~*/」

まず最初にどのデータベースを操作するかを指定する ‥ use データベース名;

■データベースの概念

データベース
 情報を入れる箱
 1アプリケーションでデータベースは1つが基本

テーブル
 行(ロウ)と列(カラム)の情報を持ったデータの集合
 データベース内には複数のテーブルを持たせることができる
 管理の利便性のため基本的に「id」を振る

クエリ
 データベースに対して検索や更新、削除、抽出などを要求すること
 言葉の使い方の例:クエリを投げる

■主なデータ型

数値型
 int
 tinyint
  -128~127の範囲の整数
  true/falseを扱える(0 が false, 1 が true)
  MySQLでは 0 と null が false, 空文字を含むそれ以外の全ては true
 float
 double

文字列型
 char
  固定長 255文字まで 例:char(5)
 varchar
  可変長 255文字まで 例:varchar(255)
 text
  65535文字まで

日付、時刻型
 date
  日付
  '1000-01-01' ~ '9999-12-31'
 datetime
  日付と時刻
  '1000-01-01 00:00:00.000000' ~ '9999-12-31 23:59:59.999999'
 time
  時刻
  '-838:59:59' ~ '838:59:59'

■記述順序

① select ‥ 取得する列
② from ‥ テーブルの指定
③ ~ join ‥ テーブルの結合(いくつでも結合できる)
④ where ‥ 絞り込み条件(条件は複数指定できる xx and xx and xx ...)
⑤ group by ‥ グループ化
⑥ having ‥ グループに対しての絞り込み条件
⑦ order by ‥ 並び変え条件
⑧ limit ‥ 取得する行数

■nullについて

平均を出す関数などの計算でnullは無視されるため注意が必要。
nullに対して何か演算しても結果はnullになる。
データの値がnullにならないようなるべく「0」や「""」(空文字) になるようにする。

■色々な関数

合計値 ‥ sum(*)
平均値 ‥ avg(*)
最小値 ‥ min(*)
最大値 ‥ max(*)
行数のカウント ‥ count(*)
絶対値 ‥ abs(*)
四捨五入 ‥ round(対象, 丸める桁数)
文字列の連結 ‥ concat(xx, xx, xx, ...)

■日付・時刻の関数や演算

現在の日付 ‥ current_date()
現在の時刻 ‥ current_timestamp()
n日後の日付 ‥ d + interval n day
n日前の日付 ‥ d - interval n day
n時間後の時刻 ‥ h + interval n hour
n時間前の時刻 ‥ h - interval n hour
日付・時刻から特定部を抽出 ‥ extract(指定 from カラム) = xxxxxx
 month 例:1
 year 例:2019
 year_month 例:201901

■テーブル関連

正規化 ‥ idで管理してidごとの内容の紐付けは別テーブルを参照する形にすること
主キー / Primary Key(PK)
外部キー / Foreigh Key(FK)

内部結合 ‥ inner join
外部結合 ‥ outer join(left outer join / right outer join)
テーブル末尾に別テーブルを追加 ‥ union または union all(重複行も残す)

■ビュー関連

ビュー作成 ‥ create view ~~
ビュー削除 ‥ drop view ~~
ビューの利用 ‥ select ~ from ~(ビュー名)

■サブクエリ

where xx in(select ~~ from ~~) ‥ ある値が含まれているものを探す
where xx not in(select ~~ from ~~) ‥ ある値が含まれていないものを探す

■条件分岐

case
 when ~~ then
 when ~~ then
 else ~~
end

■日付のフォーマット変更

date_format(~~, '%Y%m') ‥ 年・月のフォーマットに変更

■テーブルのデータ操作

データ追加
 insert into テーブル名(列1, 列2, 列3, ...) values(値1, 値2, 値3, ...)
データ追加 省略版
 insert テーブル名 values(値1, 値2, 値3, ...) ※ただし全列の値の指定が必要

データ変更
 set sql_safe_updates = 0; ※大量のデータを変更する際のセーフティの外し方
 update テーブル名 set 列1 = 値1, ...;

データ削除
 delete from テーブル名 where ~~

■データベース構造の操作

データベース表示 ‥ show databases;
データベース作成 ‥ create database データベース名;
データベース削除 ‥ drop database データベース名;

テーブル表示 ‥ show tables;
テーブル追加 ‥ create table テーブル名(列名 データ型, 列名 データ型, ...);
 列のオプション
  not null nullを許可しない
  auto_increment IDを自動で割り当てる
  primary key IDを主キーに設定する
テーブル削除 ‥ drop table テーブル名;

列情報の表示 ‥ show columns from テーブル名;
列の追加 ‥ alter table テーブル名 add 新しい列名 int after 既存の列名;
列の変更 ‥ alter table テーブル名 change 旧列名 新列名 データ型;
列の削除 ‥ alter table テーブル名 drop 削除したい列名;

一通り学んで、とりあえずSQLでデータベースを操作するということがどんな感じかを理解することができました!

C#を覚えてからC++を始めたときのメモ

C#の基本的な文法を覚えてからC++を始めた際にとまどう部分についてのメモです。

■Hallow Worldでまず戸惑う

初心者が入門ページを検索してまずお目にかかる「std::cout << "hoge" << std::endl;」という謎の記述法に戸惑う。
ラムダ式を初めて見た時のような感じ。

■printfで戸惑う

「printf("%f\n", 123.456);」こういう「%c」とか「%d」の指定で戸惑う。
C言語の文法みたいですが、この時点でもう「ややこしいっ」という印象を持ってしまう。

■include と namespace の違いが分からない

C#は先頭にusingを記述してクラス参照時に名前空間を省略可能になりますが、それとincludeとの違いが分からず戸惑う。

■クラスがヘッダーと本体と分かれている

includeでヘッダーだけ読むというパターンに多く遭遇して、そもそもクラスがヘッダーと中身の定義でcppファイルが分かれていることに戸惑う。

■関数が使用される行よりも先に宣言が必要

関数が実際に呼ばれる行よりも前に宣言しておかないといけないのと、そのためか宣言だけ行って中身の定義は後にしてと分割していることに戸惑う。

■define

コンパイルされる直前にテキスト置換されるということで「あ、なるほど便利そう」というのは何となく分かるのですが、慣れてないのでコードを読む際にそもそも混乱するし、さらに ifdef が出てくると余計に頭が混乱する。

ポインターの存在理由

ポインターが初心者の壁みたいな話は過去に何度も聞いたことがあったので存在だけは知っていたものの、アドレスを指定すると便利な場面というのが思い浮かばなくて理解が難しい。

例えばC#でも変数の値をコピーではなく参照渡ししたい場合はあって、その際にポインターが利用できるということだけなら分かるのですが、何か宣言した際にメモリをどれだけ使用しているかを把握している前提でその中身をアドレス指定で操作したり値の入っているアドレスをスライドしたりといったことがどんな用途で役に立つのかが、ちょっとしたツールを個人で作った経験上では思い浮かばない。

もちろんゲーム開発で厳密なメモリ管理をしてロードを1ミシ秒でも速くしないといけないのは分かるけど、個人がちょっとしたゲームやツール作る上では必要ないんじゃないかと学習をすっ飛ばしたくなる。でもちゃんと理解しないとチュートリアルを見て「何をやってるのか」が理解できなくなるので学習は必要なんだろうなと。

C++のバージョンの違い

11とか14とか17とかあって、初心者でもこれらの差で知っておいた方が良いことがあるのか気にしなくて良いのかどっちなんだと戸惑う。

 

随時追加していく予定。