【Ruby】Rubyで CSVファイルを処理するメモ
RubyでGoogle Spreadsheetを読み書きするメモ - Ruby on Rails 入門
上記記事の時、google spreadsheetからcsvファイルをダウンロードして
そのあとデータをjsonに整形することがあったのでメモ。
忘れないうちに自分用にメモさせていただきます
CSVからデータを取り出すにはRailsのtableとかforeachというメソッドが良いらしい。
tableはテーブル向けのインスタンスを返してくれるそうですが、
今回データを分けてHash化したかったので
foreachで1つ1つ取ってくる。
データを入れる用の配列を用意します
all = Array.new
hogehoges =
そして待ち焦がれたforeachの登場。
同フォルダ内のcsvファイルを読むよ、ヘッダーあるよ、dateに毎回入れるよ
CSV.foreach('table.csv',headers: true) do |data|
hogehoges.push data[1]
hogehoges.push data[2]
hogehoges.push data[3]
end
という感じ。
重複して欲しくなかったり分けたかったりしたので
compactやuniqを使用して最終的には下記になりました。
hashに全部入れて、jsonで返して終わりです。
#cording = UTF-8
require 'csv'
require 'json'
all = Array.new
hogehoges =CSV.foreach('table.csv',headers: true) do |data|
hogehoges.push data[1]
hogehoges.push data[2]
hogehoges.push data[3]
endnewhogehoges =hogehoges.compact.uniq
x = 1
y = 0newhogehoges.each do |neweq|
h = Hash["id", x, "name", neweq]
all.push(h)
x += 1
y += 1
endputs all.to_json
備忘録。
【Ruby】RubyでGoogle Spreadsheetを読み書きするメモ
【やりたいこと】
GoogleSpreadsheetにターミナルからアクセスをする。
様々な方法で挫折することも多々だったので現時点で上手くいった方法をメモ。
※Googleでログインしていて、
任意のSpreadsheetにアクセスできる状態が前提です。
google_driveのgemを使うのが一番良さそう。
gem install google_drive
Githubに情報たくさん載ってました。
OAuth認証だと何かと怒られるのですが
config.jsonでアクセスすれば一発でした。
google_driveを呼び出して、config.jsonファイルにアクセスするrubyファイルを作成。
require "google_drive"
GoogleDrive::Session.from_config("google_drive_config.json")
実行する
ruby setup.rb
アクセスするURLが表示されるので、
アクセスして authorization codeをコピー・ターミナルで入力。
→jsonファイルが作成されました。一番早かったです。
アクセス方法などは下記記事参照。
config.jsonを呼び出して、キー指定、
もしくはGoogleDriveのフォルダやブック、シート名を指定すれば
一発で指定のワークシートへアクセスできます。
ws = session.spreadsheet_by_key("pz7XtlQC-PYx-jrVMJErTcg").worksheets[0]
参考にさせていただきました。
RubyからGoogleSpreadsheetに書く - お手軽編 - Qiita
公式Github
GitHub - gimite/google-drive-ruby: A Ruby library to read/write files/spreadsheets in Google Drive/Docs.
google-drive-ruby/authorization.md at master · gimite/google-drive-ruby · GitHub
公式ドキュメント
File: README — Documentation for google_drive (2.1.5)
GoogleSpreadsheetへの読み書きは、worksheetを定義した上で使用可能。
あるシートから別シートへデータを写したいときなどは下記などで実行できます。
以下割と使ったのでまとめ。
p worksheet[1,1] #1行1列目を表示
worksheet[1, 1] = "aaa" # 1行目1列目に書き込み@item1 = worksheet[2, 1]
#worksheetの2行目1列目のセルを@item1に代入
worksheet2[2, 2] = @item1
#worksheet2のセル2行目2列目に@item1を代入
worksheet2.save
#保存p worksheet.num_rows # レコード数を取得
p worksheet.num_cols # カラム数を取得
以上
【Ruby】Ruby on Rails で 初心者がAjaxを使ってみる
【やりたいこと】
カテゴリーを変更すれば、Ajaxが 対応するカテゴリーのitem を取得し表示する。
※itemの部分のみが変更されるので、ページ変遷しない
【イメージ】
表示:ajax/search.html.erb
category1〜3で選択する
→api/controllers/ajax.controllerが呼び出される
→projectモデルがprojectsテーブルからデータ取得する
→選択したcategory_id=?のデータを表示する
※一旦シンプルに考えるためにアソシエーション無視して
category_idで同テーブルのデータを使用することとします
まずはコントローラを作成、その後必要なビューとかを作ります。
部分テンプレートを使用しました。
部分テンプレートを使用すると
ファイル名の先頭に「 _ 」をつけるという制限があるので、
今回は下記の通りファイルを作成しました。
・controllers/ajax_controller.rb #rails g controller ajax
・view/ajax/search.html.erb
・view/ajax/result.js.erb
・view/ajax/_search_result.html.erb
ajax_controller.rb
class AjaxController < ApplicationController
def search
@projects = Project.select(:category_id).distinct
#表示するカテゴリー番号を取得
enddef result
@projects = Project.where(category_id: params[:category_id])
#指定されたカテゴリーIDでprojectsテーブルを検索
end
end
search.html.erb
<%= form_tag({ action: 'result' }, remote: true) do %>
#view helperのform_tagは
#remoteオプションでsubmit時に非同期通信
<%= select_tag(:publish, options_from_collection_for_select(
@projects, :category_id, :category_id, '1')) %>
#option_from_collection_for_select = 選択肢をDBから生成するメソッド
<%= submit_tag '検索' %>
<% end %><ul id="result"></ul>
#結果を反映する
_search_result.html.erb(部分テンプレート)
<% @projects.each do |project| %>
#取って来たproject itemを1つずつ下記project.titleへ出力
<li><%= link_to project.title,
'http://aaa.aa.aaa.aa/index' %></li>
<% end %>
result.js.erb(部分テンプレートが作った結果をJavaScriptで応答)
$('#result').html(
"<%= escape_javascript(render 'search_result') %>")
#受け取った結果をhtmlファイルへ変換
route.rb
get '/ajax/result'
post '/ajax/result'
get '/ajax/search'
post'/ajax/result'
ルートにこれ追加したら一応なんとかいけました。
できました !
【Ruby】Ruby on Railsでdevise使ってログイン機能を作る
Ruby on Railsでログイン機能を作ります。
何やらとても便利なdeviseというgemがあるそうなのでそれを使用します。
■ deviseをインストールする
vi Gemfile #Gemfileをvimで開く
gem 'devise' #deviseというgemをGemfileに記載する
bundle install #未インストールのgemfileをinstallする
bundle installすると、gemの初期設定に必要な項目が表示されるので
それに沿って初期設定を実施します。
■ deviseの初期設定をする
1.認証URLの設定をする
config/environments/development.rbで下の方のurl_optionsを下記へ編集。
config.action_mailer.default_url_options = { host: 'localhost:3000' }
私はさくらのVPSを使っていたので、 IPアドレス000.00.000.00:3000と記載しました。
2.rootの行き先を指定する/モデルとコントローラーを作る
すでにrootが設定されていれば必要ありませんので、rake routesで確認します。
rake routes #リクエストに対応する行き先を確認する
上記は設定されています。
rootの行き先が設定されて
もし設定されてない場合はroutes.rbへ
root 'home#index' #homeは任意です、この後のCとMは合わせます
を追記ください。
次にコントローラーとモデルを作成します。
rails g controller Home index #規約でControllerの1文字目は大文字
rails g devise home #規約でmodelは小文字
rake db:migrate
3.ログインとサインアップへのリンク設置
indexにログインとサインアップの画面を作成します。
<body>〜</body>の間へ作成ください。
Logged in as <strong><%= current_user.email %></strong>.
<%= link_to "Settings", edit_user_registration_path, :class => "navbar-link" %> |
<%= link_to "Logout", destroy_user_session_path, method: :delete, :class => "navbar-link" %>
<% else %>
<%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link' %> |
<%= link_to "Login", new_user_session_path, :class => 'navbar-link' %>
<% end %>
そして、どのページでもログイン情報が画面に出力するよう、
application.html.erbへ下記を追加します。
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
■起動を確認する
rails server -b 0.0.0.0
サーバーを起動し、localhost:3000へアクセス。
Sign upで自分の任意のアドレスを入力ください。
任意のアドレスにメールが届くので、
Confirm my accountをクリックし認証。
ログイン画面でログインができれば成功です。
ちなみにデータはmodel作成時にできたテーブルで確認できるので
mysqlを立ち上げ、use データベース名 -> select * from テーブル名 \G;により
sign up したデータを確認できます。
メールの認証ができていれば、confirmedの2箇所に
token付与、日時が記載されているはずです。
カスタマイズなどはViewを作成してカスタマイズください。
以上です。
【環境構築】CentOS7にRuby+Railsをインストールする(rbenv使用)
前回VagrantとVirtualBoxを使用した仮想環境が完成したので、
この環境にrubyとrailsを入れていきます。
色々とインストールしたいのでroot権限で行います。
sudo su #root権限へ
yum update #インストール済パッケージで更新できるものを更新する
一通りupdateしておきます。
yum install rubyだと2.0.0という少々古いバージョンしかinstallできなかったので
今回はrbenvというrubyのバージョン管理ツールを使用します。
rbenvを使用するため、必要なgitを先にインストールします。
yum -y install git
gitがインストールできたら、rbenvをcloneして
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
rbenvのプラグイン「ruby-build」もcloneします。
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv単体ではrubyをinstallできません、このプラグインが必要です。
rbenvの公式ドキュメントにも記載がありますが、
rbenv用に以下2行を書きかえ、書き換えた.bash_profileを読み直します。
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
これでインストールできるようになったはずです。
インストールできるrubyのバージョンを確認します。
rbenv install --list
いっぱい出てきたら自分の欲しいバージョン名を指定します。
rbenv install -v 2.3.1 #バージョン指定はお好みで変えてください
これで問題ないくinstallできればOKです。
(少し時間がかかりますが、Complete!と出てくるはずです)
もし何か足りないというエラーが出てきたら、
足りないものをyum installして、再度上記コマンドをお試しください。
yum install -y openssl-devel readline-devel zlib-devel #一例です
ここまでできれば、バージョンを確認します。
自分がinstallしたrubyのバージョンが記載されて入ればOKです。
もしバージョンが指定したものになっていない場合は、
rbenv global 2.3.1 #自分の使用したいバージョンを記載
rbenvを使用して、切り替えてください。
OSごとバージョンの切り替えをして問題がなければglobal、
今いる位置限定の場合は globalの箇所をlocalへ変更ください。
Rubyがinstallできたので、最後にRailsもバージョン指定でinstallします。
gem install rails --version="4.2.1" #""内にバージョンを記載
ここまで出てきた単語と関連ある単語を初心者が簡単に整理してみます。
- yum ( 第6章 Yum )
…OSへのソフトウェアの導入と削除、管理などを行うパッケージ管理ツール
LinuxのRedHat系には基本的に搭載されています。 - git ( Git )
...ソースコードのバージョン管理ツールです。 - rbenv ( GitHub - rbenv/rbenv: Groom your app’s Ruby environment )
...rubyのバージョン管理ツール。バージョンの切り替えなどが可能です。
例えばruby2.0.0→2.3.1など。 - ruby-build ( GitHub - rbenv/ruby-build: Compile and install Ruby )
...rbenvを使ってrubyをinstallするためのプラグインです。 - gem ( RubyGems.org | your community gem host )
...rubyのgem形式のライブラリを管理するパッケージ管理システム。
Rubyをinstallすれば標準で搭載しています。
例えばrailsなど、便利なライブラリが沢山あります。 - bundler ( Bundler: The best way to manage a Ruby application's gems )
...gemの1つ。アプリケーションに必要となるGemパッケージの種類やバージョンを管理する。Gemfileを通してbundle installすればたくさんの依存関係を持つgemをうまいこと必要な分だけintstallしてくれるそうです。
【環境構築】Vagrant+VirtualBoxを使ってCentOS7の環境構築する
【環境】Max OSX
【構築する環境】Vagrant+VirtualBox+CentOS7
1.VagrantとVirtualBoxをそれぞれインストールする
Vagrant by HashiCorp
Downloads – Oracle VM VirtualBox
今回は、Macに合わせてインストールしました。
特に編集する必要もないので、次へを押し続けてインストールを完了します。
VagrantがインストールできたかどうかはMacのターミナルを開き、
本コマンドで、下記の返答があればOKです。(2017/7/23現在)
Vagrant 1.9.7
VirtualBoxはインストール後Application内にあります。
これでVagrantとVirtualBoxのインストールは完了です。
2.仮想サーバーを起動・接続する
続いて、ターミナルで操作します。(#部分は説明なので不要です)
vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
#centos7.2というboxを追加
※vagrant box add [box名] [URL]で指定しています。
box名とURLはA list of base boxes for Vagrant - Vagrantbox.esこちらで取得できます。
インストールには時間がかかります(私の場合は5分程度でした)
完了しました。
このコマンドで初期化した後、
vagrantを起動して、
接続できました。
ターミナルが下記のようなコマンドになっていれば完了です。
初期設定が完了したので、今後は下記コマンドを使います。
vagrant up #起動
vagrant status #状態確認
vagrant halt #停止
vagrant reload #再起動
以上で、環境の構築は完了です。