rbenvで初めてのRuby on Rails

ローカル環境で作業すると色々苦労が多そう。なので備忘録を作っておきます。

 

本当はMastodonのローカルサーバーを建てる時が初めてのRailsだったのだけど、Railsの勉強という意味では初めて。今回はQiitaで紹介されてたチュートリアルを進めてる。

 

ローカル環境構築で参考にしたのはコレ

どっちもググって頭の方に出てきたもの。ありがたいなあ。 

 

やったこと

まずはvendor/bundleという即席フォルダにrailsをinstall。

Gemfileのひな形作成→railsを対象に含めるよう書き換え→bundle installの順。

Gemfileにはもともとrailsコメントアウトされているので、viで編集して外します。

$ rbenv version
$ rbenv exec bundle init
$ vi Gemfile
$ rbenv exec bundle install --path vendor/bundle

 

次はアプリケーションの作成と即席フォルダ等の削除。

ここまで環境を汚さないことに拘るのか。初心者なので素直にやる。

$ rbenv exec rails new hello_app
$ rm -f Gemfile
$ rm -r Gemfile.lock
$ rm -r .bundle
$ rm -r vendor

 

できたらサーバーの起動。

$ rbenv exec rails server

http://localhost:3000/

 

やったね!

f:id:hiroga_cc:20170816155513p:plain

 

やってみて 

チュートリアルのいう通りCloud9でやったほうが絶対楽だ。Cloud9からHerokuに直接デプロイもできるらしい。すげえな。

でもMastodon建てた時の知識を整理しておきたかったので良い機会にはなった。 

Githubでコミットのたびにツイートする(ときの名前の出どころが知りたかった)

先人の知恵をお借りするのが一番。

pogin.hatenablog.com

 

設定するとこんな感じになる。

 どうしても分からなかったのが、この名前部分をどこから持ってきているのか。

(コミット時の署名から持ってきているのだけど、当時は知らなかったので)GithubとかTwitterのアカウント設定を隅々まで見ても、どこにも本名は入れてないので不思議でした。

 

ここに入ってる名前はホームディレクトリの.gitconfigファイルで確認できます。

$ cd ~

$ vi .gitconfig

みたいなね。

 

仕事でGit使ってる人なら常識なんだろうけど、業務系システムだとGit使ってるとこはまだ少数派なんじゃないかな?分からんけども。

Unityでウォーグレイモンを走らせてジャンプさせてみた

f:id:hiroga_cc:20170815083858j:plain

 

Unityで自分の好きなキャラ動かせるとめっちゃ気持ちいんですよ。

 キャラクターのインポートからキーボードでグリグリ動かすまで、備忘録を作りました。

 

参考にしたページ

第8回目:3Dキャラクターをノンプログラミングで動かす(後編)|Tech Book Zone Manatee

Unityちゃんを動かしてみる | Think IT(シンクイット)

Unity - 入力されたキーの情報を取得する - Qiita

 

手順

1. 準備
1-1. プロジェクトの作成
1-2. オブジェクトの配置

2. ウォーグレイモンの作成
2-1. アバター定義の追加
2-2. ウォーグレイモン召喚
2-3. Character Controllerの追加

3. ダッシュ編
3-1. 走るアニメーションの追加

4. ジャンプ編
4-1. カメラに追わせる
4-2. ジャンプの追加

* もしUnity未経験なら初めに公式のチュートリアルやってからの方が絶対いいです

 

 1. 準備

まず、必要なアセットをインポートします。

・キャラクター

今回はこちらのウォーグレイモンのモデルを拝借しました。

free3d.com

・動き

https://www.assetstore.unity3d.com/jp/#!/content/7673

https://www.assetstore.unity3d.com/jp/#!/content/5330

 

完了したらプロジェクトを作成し、上記のアセットをインポート。

これからウォーグレイモンが立つ場所を作っておきます。

Create > 3D Object > Plane

* PlaneのScaleをx,y,zそれぞれ5づつくらいにしておくと、走らせた時に落ちなくて良いです。

 

2. ウォーグレイモンの作成 

モデルをHierarchyに追加する前に、アバター定義(グリグリ動かすための骨組みと肌との間のマッピングのことらしい)を作成します。

ProjectビューのWarGraymon.fbxを選択し、InspectorのRigタブで

Animetion Type > Humanoid を選択し、Applyを選択。

* 画像はデュークモンですが手順は一緒です。

f:id:hiroga_cc:20170815001502p:plain

ちなみにここで失敗すると

Invalid Avatar Rig COnfiguration. Missing or invaild trasform:

        Required human bone 'Hip' not found

って表示がよく出てきます。

文字通りお尻に当たる部分のパーツが見つからないか、もしくは単にアバターがパーツごとの区別を保って作成されていないかどどちらか。(単にHipを解析するのが最初だからHipでエラーになるだけで、細分化されてない時はだいたいこのエラーになる)

 

エラーがなければウォーグレイモンのPrefabをHierarchyにドラッグ&ドロップし、ウォーグレイモンを召喚します。

ここで再生するとこんな感じ。

f:id:hiroga_cc:20170815001148p:plain

さらに、重力とか回転とかをUnityの物理エンジンに再現させるためのComponentをウォーグレイモンに追加します。

Add ComponentでRigidbodyを追加し、Use Gravityをチェック。

f:id:hiroga_cc:20170815001151p:plain

この時点で再生するとこんな感じになります。落下する。

これは地面とウォーグレイモンに当たり判定をするためのComponentが追加されていないため。それぞれ追加します。

PlaneにBox Colliderを追加

ウォーグレイモンにはCharacter Contorollerを追加。*1

多分ウォーグレイモンの体のサイズと合ってないので、Sceneビューを見ながら数値をいじって調整します。特に、地面に埋まらないように足元の調整に気を使う。*2

f:id:hiroga_cc:20170815001158p:plain

私の場合はこんな結果になりました。

f:id:hiroga_cc:20170815001204p:plain

* ウォーグレイモンにCapsule Colliderを追加してもいいのですが、Character Controllerだと変にウォーグレイモンが転がってしまうことがないのでこっちのが便利。

* 私の環境のウォーグレイモンは足元を調整しても地面に埋まったんですけど、ポージングに問題があったっぽい。Motionで適当なアニメーションを設定したら埋まらなくなりました。

 

ここまでで役者は揃いました。あとはアニメーション。

 

3. ダッシュ編 

初めにインポートしたMecanim Locomotion Starter Kitをウォーグレイモンに追加していく作業です。

 ウォーグレイモンのAnimator > Controllerの右側の◉をクリックし、Locomotionを選択。合わせて、Apply Root Motionをチェック(これやらないと方向キーに反応してくれないっぽい)

f:id:hiroga_cc:20170815001201p:plain

さらにAdd Component > ScriptでLocomotion Controllerを選択します。

ここまでで再生すると方向キーに合わせてウォーグレイモンが動くはず!

 

4. ジャンプ編

せっかくなのでカメラにウォーグレイモンを追わせます。

一番手軽なのはMain CameraをHierarchyでウォーグレイモンの子要素にしてしまうことなのですが、もっとスムーズにカメラが付いてくるやり方があるのでそっちにしましょう。

Main CameraにAdd ComponentでSmooth Followを追加します。次に、TargetにWarGraymonを追加します。これでいい感じにカメラが追尾してくれます!

 

ジャンプを追加します。ジャンプのモーションをもつ状態を作成し、それへの遷移を追加する感じです。

Asset > Locomotion Setup > Locomotion > Locomotionをダブルクリックし、Animatorビューへ移動。下の画面になると思います。

f:id:hiroga_cc:20170815001206p:plain

 

まずStateを新規作成します。空白部分で右クリック  > Create State > Emptyし、名前を任意に変更(Jumpとか)

MotionにRunJumpを追加します。(何種類かあるので適当に選んで、あとで気に入ったのにすると良いと思います。)

 

次に遷移を追加します。新規作成したStateの上で右クリックしMake Transitionを選択。矢印をWalkRunへと結びます。できたら逆に、WalkRunの上で右クリックして新規作成したStateへのTransitionを追加します。

 

最後に、Transitionに遷移のための条件を追加します。

Animatorビュー左上のParametersで+を押下し、Triggerを選択。名前は"Jump"としておきましょう。

できたら先ほど追加したTransitionのうち、WalkRunからJumpに伸びるほうをクリック。Inspectorビューで変更を加えます。Conditionsで+を押下し、先ほど作成したParametersのJumpを選択してください。

ここまでできたらAnimatorビューでの作業は終わりです。

 

ParametorsのJumpをオンオフするスクリプトを追加します。HierarchyビューでWarGraymonを選択し、Add Component > New Scriptで"WGController"を作成します。

* 別に名前はなんでもいいのですが、C#のクラス名とは合わせる必要があります。

 

できたらvoid Update( ){ }の中を以下の通り書き換えてしまってください。

 

void Update () { 
  Animator anim = GetComponent ();
  AnimatorStateInfo state = anim.GetCurrentAnimatorStateInfo (0);
if (Input.GetKeyDown (KeyCode.Space)) { anim.SetTrigger ("Jump"); }
}

 

以上で作業は全て終了です。あとは再生ボタンを押せばウォーグレイモンが動くはず!

 

やってみて

好きなキャラクターがグリグリ動くのって予想以上に楽しい。Unityってとっつきにくそうなイメージがあったけど全然そんなことはなかった(Adobe触った経験があったからかもしれない。 UIが似てる)

個人で楽しむ分には色んなモデルがインターネット上にあるし、こういうので楽しみながら練習してハッカソンとかで役に立てたいなと思う所存です。

Macお掃除備忘録

最近Macが容量が少ないって警告を出すようになった。 調べると、どうも使ってるうちにいらないファイルが溜まっていくらしい。 また同じ掃除をすることになりそうなので、備忘録化しておきましょう。

お掃除の手順

  1. どこが容量を使っているか調べる
  2. 容量を使っている場所ごとに対応する 2-1. Xcode 2-2. VirtualBox 2-3. 不要なApp 2-4. その他(TrashとかCacheとか)

1.どこが容量を使っているか調べる

Disk Inventory X www.derlien.com

ディスク容量を食っているファイルを面積で可視化するスグレモノ f:id:hiroga_cc:20170813183841p:plain

Macの[About This Mac] -> [Storage]でも見られるけど、結果を解析するまで時間がかかるのよね。 (Disk Inventory Xも10分以上くらいかかるけど)

2. 容量を使っている場所ごとに対応する

2-1. Xcode

先人の知恵を拝借 qiita.com

2-2.VirtualBox

使ってないVMのOSが5GBとかあって容量を圧迫していた。

pc-karuma.net

2-3. 不要なApp

最近使ってなかったNeo4Jとか、ダウンロード以来一回も使ってないPyCharmとか消しました。

nektony.com

2-4.その他(TrashとかCacheとか)

この子でまとめて削除します。僕は17GB浮いた(例えばゴミ箱が7GBあったりとか)

全然関係ないけどMarkDown記法ではてブロ書けるのめっちゃ便利ですね

MakerFaireTokyo2017行ってきたよメモ

MakerFaireTokyo2017に参加しました!来年は出展したいな〜!

f:id:hiroga_cc:20170806225416j:plain

参加者はみんな物つくりが好きな人たちって感じで幸せそうだった。さわらはITの勉強の延長線上で来たみたいなとこあるからちょっと毛色違うかも。でも出たい!

 

もともとSpace Apps Challengeの参加者打ち上げの後に、常連の参加者さんからイベントの存在を教えてもらったのがきっかけ。

こちらの方々↓↓

ちょうどハードにも興味を持ち始めていたので参加することに。

 

実際にものつくりをしている人を間近で見たり話したりできたのがよかった!

 

ハッカソンとの層の違いが気になった。ハッカソンと違ってプレゼンで誤魔化すことができないから、意識高いだけの人が入り込む隙ができづらいのだと思う。

他に、意外にも子どもが多くて驚いた。自分も親になったら一緒に遊びに行きたい。

 

今月末にショッカソン(触覚ハッカソン)に参加するので、その下調べ的な意味でいうとUnityが使えると強いかもしれない。

3Dの映像を何かに投影したい時、Unityがあればユニティちゃんのダンス映像とかが簡単に作れる。

一方で、それは自分の業務では無縁な(気がする)んだよなあ。Unityを使う案件がどれだけあるのか...多分無いのでは...

趣味のものつくりとして考えるとそんなこと気にしても仕方ないんだけどね!

 

 

 

 

 

 

 

【備忘録】結合条件なしのJOIN

職場で困ったので、調べたことの棚卸し。

やりたかったこと

売り上げテーブルAの全てのレコードと会計年月テーブルBの最新のレコード1件を結合したかった。

会計年月テーブルA
商品 売り上げ金額
冷蔵庫 50000円
電気ケトル 10000円
掃除機 30000円

 

会計年月テーブルB
会計年月
201707
201708
201709

 

結果
会計年月 商品 売り上げ金額
201707 冷蔵庫 50000円
201707 電気ケトル 10000円
201707 掃除機 30000円

 

そのための方法

調べた感じ、Bから副表を作った後でAと結合すれば良いみたい。結合方法は...

  1. CROSS JOINする
  2. FROM句の後にテーブルを並列に書く(CROSS JOINになる)
  3. ON句なしでINNER JOINする
  4. SELECT句中でサブクエリを使う

他にもあったら教えて下さい...!

1. CROSS JOINする

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A CROSS JOIN (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP

2.  FROM句の後にテーブルを並列に書く(CROSS JOINになる)

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A, (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP

これが調べた中で一番驚きました。

 3. ON句なしでINNER JOINする

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A INNER JOIN (SELECT 会計年月 FROM B  ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP ON 1 = 1

4. SELECT句中でサブクエリを使う

SELECT A.商品, A.売り上げ金額, (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS 会計年月 FROM A

 

* 細かい書き方はDBMSによって違うと思います(FETCHとか)。さわらはDB2っぽく書いてます。

CoderDojo体験

エンジニア的な課外活動にいいんじゃないかと思ってCoderDojo体験した。
継続的に参加するか決めてないけど、とりあえず行ってよかった!


そもそもCoderDojoとは。

子ども向けプログラミング道場?で、学習塾と違うのは子どもが好き勝手やる事を大事にしている点らしい。
児童館とかのノリに近いのかな?
東京だけでも結構あって、下北沢、調布、小平、etc...
今日はCoderDojo小平に行った。

 

行ったら意外と少人数だった。(子ども4人)
あと、プログラミングじゃなくて知育おもちゃみたいなので遊んでる子の方が多かった。
(普段はもっとプログラミング寄りらしい)

 

遊んでたおもちゃ(の一例)↓↓

f:id:hiroga_cc:20170722173215j:plain

プログラミングを教えるんじゃなくて、普通に子どもの相手をするのを楽しんでしまった…(むしろ相手をしてもらった)


道場主さんの話だと、三鷹でもCoderDojoをやりたいエンジニアはいるけど、
子どもとの接し方が分からなくて困ってるらしい。そんなパターンもあるのね〜。

さわらはこの手のボランティア慣れてるけど、世の中そうじゃない人の方が多いのかもしれない。

 

今日はプログラミングのお手伝いとかはできなかったので、
また別の機会に別のDojoに行く予定です。