人生で初めて買った新品のMacBookでプログラマーを目指す記録

26歳の夏、新品のMacBookProを手に入れました。そいつと一緒にプログラマーを目指します。

git コマンド(個人的によく使うやつまとめ)

随時、変更や追記あり ふんわりとしか覚えてません

# リポジトリを作成
$ git init

# コミット
$ git commit -m “commit内容”

# プッシュ
$ git push -u origin 反映させたいbranch名

# 自分のリモート(origin)のmasterブランチからpull
$ git pull origin master

# ブランチ作成
$ git branch 作りたいブランチ名

# ブランチを移動
$ git checkout 移動したいブランチ名

# ローカルブランチを消す
$ git branch -d 削除したいブランチ名

# コミット一覧
$git log 

# ローカルブランチ一覧
$git branch 


# コミットするファイルとして、現在のディレクトリ以下の全てのディレクトリ、ファイルを指定
$ git add .git 

# addとコミットを同時に行う場合
$ git commit -a -m “commit内容”


# フォーク元から自分のローカルに反映
$ git fetch upstream
$ git merge upstream/master

# 上二つをまとめて
$git pull upstream master

# 変更されたファイルの一覧を出す
$ git status

# コミットするステージに上げる
$ git add ファイルパス


# upstreamとかoriginが何かを確認する
$ cat ./.git/config 

# こっちも上と似たような感じの
$ git config --local -l

# originとかupstreamのURLを確認する(リモート)
$ git remote -v


# バッシュの書き換えとか
$ vim ~/.bash_profile

#入力
i
# 終わったら
Esc
:qw
sift+z
sift+z

Rails データベースの作り方(テーブル、カラム含めて)

毎回毎回データベースを作る時に制約やら何やらで調べ直すので自分用メモに。

データベース自体の作成

作っているアプリ名に基づく親玉の作成。

$ rake db:create

これでとりあえずデータベース自体はできました。

ついでにデータベースの削除は

$ rake db:drop

使ったことないけど一応。

database.ymlというファイルにデータベースに関する記述がしてあります。

テーブルモデルの命名規則

私はコントローラーに合わせてつけてます。確かコントローラーとテーブル名が違っても動くらしんですが、過去それをやって盛大に失敗したことがあるので初心者はあんまりしないほうがいいと思います。

  • 例えばproductsテーブルを作る時
    • テーブル名 → products(複数形)
    • モデルのクラス名 → Product(先頭大文字の単数形)
    • モデルファイル名 → product.rb(単数形)

モデル、テーブルを作る

$ rails g model モデルのクラス名

今回は↑を元に↓を実行

$ rails g model product

これでモデルの作成はOK。ちなみにcategoryみたいな最後がyの単語を複数形にする時は英語の授業で習った通りにcategoriesみたくします。 次はテーブルを作る。

上のコマンドをでモデルを作るとマイグレーションファイル(2018xxxxxxxxxx_create_products.rb) がdb/migrateディレクトリにできる。このマイグレファイルを編集して実行したらテーブル作成完了。

マイグレーションファイルの中身は、たぶんこうなってる。

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|

      t.timestamps
    end
  end
end

productsテーブルにname、detail、priceカラムを作るとする。 なので↑のファイルを下のように記述追加する。

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string :name, null:false
      t.text :detail
      t.integer :price
      t.timestamps
    end
  end
end

カラムの型、名前、制約を追加してます。

カラムの型についてはこちら。

カラムの型 中身 主な用途
string 文字(比較的短め?) 名前とかパスワードとか画像URL
text 文字(長め) ブログ本文とか
integer 数字 idとか何かの番号
datetime 日付と時刻 使ったことない
time 時刻 使ったことない
date 日付 使ったことない
boolean 真偽値 いつか使うと思う
references 外部キーの時 意外に使う

他にもカラムの型はいくつかあるけど多分あんまり使わないと思う。実際使ってないやつもある。 私がよく使うと思うやつだけ今はとりあえず。

t.string :name, null:falsenull:falseは空のままデータベースに保存できないということ。(not null制約) 外部キーとかnot nullとかはまとめて別記事でまとめます。

いよいよマイグレーションファイルの実行

$ rake db:migrate

これでもうテーブルとカラムができてます。

一応スキーマファイルで確認。 dbディレクトリにschema.rbってファイルがあるので中身を見てみる。

ActiveRecord::Schema.define(version: 2018xxxxxxxxxx) do

  create_table "products", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t.string   "name",                     null: false
    t.text     "detail",     limit: 65535
    t.integer  "price"
    t.datetime "created_at",               null: false
    t.datetime "updated_at",               null: false
  end

end

さっき編集したマイグレーションファイルがversionのとなりに書いてます。ちゃんと読み込んでくれてる。 マイグレーションファイルは消しちゃダメ。スキーマちゃんがパニクるから。

rake db:migrateした後に消したくなったら、まずrake db:migrateを無かったことにして、さらにマイグレーションファイルすら 消したい時はちゃんとコマンドがそれをターミナルで打ち込む。

rake db:migrateを無かったことにする

$ rake db:rollback

マイグレーションファイルを消したい

今回は$ rails g model productのコマンドでマイグレーションファイル を作ったのでこうします。

$ rails d model product

これでモデルごと無くなりました。

ただカラムを一つ削除とかそういうのだったら別途コマンドがある。 モデルの綴りを間違えたとか何もかも消したくなった時に私は消します。

この辺もカラムの追加、編集、削除をその内まとめます。

インクリメンタルサーチ

jQueryを使ったインクリメンタルサーチのコードです。 データベースの中のitemを検索して出てきたitem名の横にある追加ボタンを押すとリストに追加され、リスト内のitem名の横にある削除ボタンを押すとリストの中から削除できる仕組みです。インクリメンタルサーチを勉強するための簡単なものなので実用性は低いです。 ネットで調べていろいろ組み合わせてるのであくまでも参考程度にどうぞ。

$(function() {
  $(document).on('turbolinks:load', function() {

    var result = $('#result'); 
    var itemList = $('#items');

    function appendItem(item) {
      var html = `<div class="item">
                    <p class="item__name">${item.name}</p>
                    <a class="item-search-add item__btn item__btn--add" data-item-id="${item.id}" data-item-name="${item.name}">リストに追加</a>
                  </div>`
      result.append(html);
    }

    function appendNoItem(noitem) {
      var html = `<div class="item">${ item }</div>`
      result.append(html);
    }

    function addItem(itemId, itemName) {
      var html = `<div id="item111" class="item">
                    <input name='list[item_ids][]' type='hidden' value='${itemId}'>
                    <p class="item__name">${itemName}</p>
                    <a class="item-search-remove item__btn item__btn--remove" data-item-id="${itemId}" data-item-name="${itemName}">リストから削除</a>
                  </div>`
      itemList.append(html);
    }

    $('#item-search-field').on('keyup', function() {
      var input = $('#item-search-field').val();
        $(result).empty();
          if(input.length !== 0) {

            $.ajax({
              type: 'GET',
              url: '/products',
              data: { keyword: input},
              dataType: 'json'
            })

            .done(function(items) {
              if (users.length !== 0) {
                itemss.forEach(function(item){
                    appendItem(item);
                });
              } else {
                appendNoItem("一致するアイテムはありません");
              }
            })
            .fail(function() {
              alert("アイテム検索に失敗しました");
            })
          }
    });

    $(document).on("click", ".item-search-add", function() {
      var itemId = $(this).attr("data-item-id");
      var itemName = $(this).attr("data-item-name");
      $(this).parent().remove();
      addItem(itemId, itemName);
    });

    $(document).on("click", ".item-search-remove", function() {
      $(this).parent().remove();
    });

  });
});

自分があるアプリを作ってるときのコードをまるまるコピペしてるのでクラス名とかid名とかわかりづらくてすみません。

Ruby on Railsを使ってアプリケーションを作ってみる

くそ初心者(私)のメモを兼ねてます。

 

手順

  1. rails newコマンドでアプリの雛形を作成
  2. 余計なファイルを作らないようにする
  3. haml導入
  4. devise導入

 

  • 私の現状
    • キーボード一本指打ちからプログラミングをやり始めて2ヶ月
    • MacBookPro13インチ
    • ターミナル
    • sublimetext3
    • ruby 2.5.1
    • Rails 5.2.1
    • mysql

などなど、その他お察しください。

  事前に… まずターミナルで$ mkdir practiceを打ち込んで練習用ディレクトリを作成。 その後$ cd practiceディレクトリ移動

 

rails newコマンドでアプリの雛形を作成

  rails new 〇〇
  rails new 〇〇 -オプション

が基本のコマンド

今回はrails _5.2.1_ new pandapp -d mysqlで作成。

rails5.2.1でオプションでmysql指定して「pandaapp」という名前のアプリケーションを作る。 作ったらcd pandaappのコマンドでpandaappディレクトリに移動する。

bundle exec rake db:create

データベース作成

 

余計なファイルを作らないようにする

sublimetextでconfig/application.rbを編集

module Pandaapp
  class Application < Rails::Application
    config.generators do |g|
      g.javascripts false
      g.helper false
      g.stylesheets false
      g.test_framework false
    end
  end
end

記述を追加

 

haml導入

ジェムファイルに

gem 'haml-rails'   //hamlのgem

gem 'erb2haml'   //erbファイルを一括変換するためのgem

の記述を追加してbundle install

ターミナルでrake haml:replace_erbsを実行 今まであったerbファイルがhamlちゃんになってます。 これで完了

 

devise導入

Gemfileにgem 'devise'を記述 からのbundle install

rails g devise:installでdevise関連のファイルを作成

rails g devise user (userはモデル名)マイグレーションファイル ができるので適宜変更。 bundle exec rake db:migrateマイグレーション実行

deviseでは他にもビューファイルの生成やストロングパラメータのコントローラーの記述追加などありますが別記事参照です。

 

これらができたらルーティング設定してコントローラ作ってビューの編集…の流れでアプリケーションができます。

リモートリポジトリに強制同期

こんばんは、いきなりですけど、こんばんは。

 

GitHubを使ってるんですけどコミットしてプッシュして新しいリポジトリを作って、さあまた編集しようとした時に

 

「あれ?さっき作ったビューファイルが全部消えてる?!」

   ↓

リモートリポジトリを確認

   ↓

「は?リモートにはちゃんとマージされてる。」

 

となってしまいメンドくさいことになったので、その方法をメモ。

多分うまく同期できてなかったと思われ。

 

      git fetch origin

     git reset --hard origin/master

 

目当てのディレクトリに移動してターミナルに打ち込んだらいけた( ;∀;)

今はちゃんとマージする度にローカルのmasterリポジトリとリモートリポジトリを同期させてます。

 

自主制作

こんばんは、ここ2、3日はちょっと忙しくて更新してませんでした。

というのも応用編に入ってからまた一段と難しいアプリケーション(LINEみたいなやつ)を作るっていうのがカリキュラムになってきて、さらに今までやってきたことを生かしてtwitterとブログの中間みたいなアプリケーションの課題が投げつけられました(*´Д`*)

締め切りは一週間後…

 

rails newコマンドを使って作ります。HTMLとCSSも一から自分でやってます。scaffoldっていうやり方でやるとルーティングやコントローラ、ビューファイルまで作ってくれるんで今日試しにやってみたんですね。確かに一発でできました。これにdevise入れればできあがり!…なんでしょうけど、ちゃんと一から作ることにしました。

単純に面白くないっていうのもあるんですけど、一から作ることで理解を深められるし、scaffoldでやったら自分じゃ持て余してるファイルが作成されちゃうし、まだ読んだことないようなコードで書かれていて分からないし…。

scaffoldでやるのはそれが終わってから自分でじっくりやればいいかなって。

 

GitHubを昨日から本格的に使い始めたんだけどまだいまいちよく分からない。使っていけば慣れるんだけどねー、こればっかりはねー。ひたすらやるしかないわー。

 

ひと段落したらこのブログでも色々書きたいな、と思います。毎日は厳しいかもしれないけど今やってることもちょくちょく書きます。

 

ちなみに今日は、まずrails newでアプリケーションの雛形を作りました。mysqlオプションは忘れずに。何個かgemを入れて、migrateの時に不要なファイルが作成されないようにする記述をしたところまでです。

明日はデータベース作ってコントローラの作成、deviseの導入までできるといいなと思います。悩みどころは、ビューファイルはその都度やるべきか、あとでまとめて編集すべきなのか。迷う。

 

それでは、おやすみなさい。

勉強時間4時間

こんばんは、いまだにMacBookをどちらから開いたらいいのか分からない私です。

 

今日はほぼ一日中ハローワークか区役所にいたので勉強時間が短めです。

区役所では年金とかの手続き、ハロワでは失業保険の説明会でした。

 

今日はGitとGitHubの分野に手をつけたのでほんの少しだけそれについてアウトプットします。まーじでほんの少しな。

 

ではまずGitについて。Gitとはなんぞや?って感じですよね。今までのカリキュラムでもなーんとなくGitって聞いたことあったけど特に詳しく触れてなくて謎のままでした。それが今夜!ついに明かされる!

Gitとはバージョン管理システムです。…ばーじょん、かんり、しすてむ。と言いますと?ソースコードとかの更新履歴を管理するためのやつ!やつ!企業とかでもチームで開発する時とかに使われてるらしいです。これがあれば更新の日時や誰がしたのかとかも管理できるし間違って消してしまった時もセーブしたところからやり直せるってことですね。ファイル共有ソフト(どろっ○ぼっくす)とかだと一人が編集してるのに気づかずもう一人が変更しちゃったりとかして面倒くさいことになるんだってばよ。

 

Gitを使うに当たって必要なワードはリポジトリ「コミット」リポジトリ???まーた変なの出てきたよ。リポジトリとはファイルの変更を記録しておくための箱?袋?器だと思ってください。こいつの管理下にファイルとかを置いてやることで、そのファイルたちの変更履歴を記録することができる、と!重要ですよ!これ。

ではコミットとは?結果にコミットすんの?コミットさん?コミットとはファイルを記録しますよってことです。つまりコミットするんです!!コミットする=セーブする?みたいな感じの受け取り方してます、私。

 

GitHubは、よくGitとGitHubを混同されがちらしいんですけど、Gitの機能を使って便利にいろいろできるようにされたWebサービスのことなんです。GitHubには世界中のあらゆるデータやソースコード、デザインデータとかが保存公開されてるんですね。何よりもチーム開発ではこいつが役に立つそうで、カリキュラムにも取り入れられてるんですよね。

そして今日はGitHubの会員登録を済ませて、エラーが出て、ここまでにするかーってなりました。いやいやちゃんと考えたんですけど分からなくって。続きはまた明日です。

 

今日は勉強全然できなくて遅れに遅れまくってるんで明日こそは進めたい。

おやすみなさい。