約束の地

キャロの想い出

プログラミング

UPSERT を簡単に実現できる gem である「upsert」を使おうとして wrong number of arguments (given 2, expected 0) と怒られた場合

UPSERT を実現する gem である「upsert」 結論 require 'upsert'する。 どうしてこうなった Active Recordのヘルパーメソッドとして使おうとしてrequire 'upsert/active_record_upsert'だけをrequireしていた。 すると、どうあがいてもwrong number of argum…

npm install をしたら「npm ERR! code ENOSELF npm ERR! Refusing to install package with name "gulp" under a package」みたいに怒られたとき

結論 プロジェクト名を変える。package.jsonで言うところの"name": "gulp",のところ。 理由 まあエラーメッセージのとおりなんですが……。プロジェクト名とインストールしようとするパッケージ名が同一になってはいけないということです。以下は、~/gulpとい…

npm install で -g オプションを使い分ける

結論 原則として-gオプションは使わない*1。 global にインストールされない実行ファイルはどうやって実行するか npm runコマンドで実行する。gulpだとしたら以下のとおり。 $ npm run gulp Rubyで言うところのbundle execです。 *1:「原則として」

n で node をインストールしてもバージョンが変わらないとき

結論 シェルに入り直す*1。 備考 よくあることですね。 *1:か、同等の操作をする

nvm と n の違い

結論 nvmはユーザごとのローカル環境においてバージョン管理が行われる*1 nは全ユーザ共通の環境でバージョン管理が行われる*2*3 参考(感謝!) *1:Ruby の例で申し訳ないですが rbenv のようなもの *2:apt や yum でバージョンを行き来するようなイメージ …

Ubuntu 16.04 LTS で Node.js をインストールする際は nodejs と nodejs-legacy のどちらを入れるべきか

結論 nodejs-legacyパッケージを入れる。 理由 nodejsパッケージでは以下のようにnodeコマンドが見当たらない。 $ sudo apt-get install nodejs (省略) $ node --version The program 'node' is currently not installed. You can install it by typing: s…

Ubuntu 16.04 LTS での apt-get install における node と nodejs(nodejs-legacy)の違い

結論 nodeはNode.jsとは全く無関係のアマチュア無線関係のパッケージである。したがって、Node.jsを入れる場合にはnodejsパッケージかnodejs-legacyパッケージをインストールする。 参考 備考 最近では$ sudo apt-get install nodeしようとしてもパッケージ…

IntelliJ IDEA で Ruby をリモートで Run/Debug しようとしてできなかった話

できなかった ハマりにハマったけどできなかったし、どうももともとできそうにないのですが、やったことを取りあえず殴り書いておきます。

IntelliJ IDEA の Community 版では PHP や Ruby のプラグインは扱えない

結論 標題のとおりです。Community 版で入れることができてしまったら RubyMine や PhpStorm は何なの、ってことになっちゃいます。 解決策 Ultimate 版を使いましょう。あるいは素直に Eclipse 。

Linux Mint にて Visual Studio Code を使った場合に一部フォントでバッククォートの表示位置がズレる

結論 Myrica M(ミリカM)を使う。 ダメ Ricty Diminished を使う プログラミング用フォント Ricty Diminished Myrica(ミリカ)を使う プログラミングフォント Myrica / Estable | Myrica (ミリカ)は、フリーなプログラミング用 TrueType フォントです。 …

Capistrano でローカルにファイルをコピーするだけの方法(Git(SCM)を使わない)

結論 1. capistrano-scm-copy をインストールする まずcapistrano-scm-copyというgemをインストールします。 $ gem install capistrano-scm-copy

Active Record で UPSERT する方法

結論 Userモデルを対象にすると仮定した場合、以下のようにfind_or_initialize_byメソッドで検索をかけて、saveメソッドをチェインすればよいです。 User.find_or_initialize_by( name: 'tomoyo', age: 23, gender: 'female', ).save 補足 便利なgemがあるか…

Embulk の embulk-input-random を用いてランダムなデータを作成する方法(CSVファイルへ書き出す)

embulk-input-random kumagi さんによる Embulk のプラグインです。いわゆるダミーデータの作成に役立ちます。

RSpec と SimpleCov を使ってカバレッジを計測、表示する

結論 1. まず SimpleCov をインストール 以下ではシェルからインストールしていますが、Gemfileに書いてbundle installでもよいです。 $ gem install simplecov

単体で RSpec を使う際の require のやり方

結論 spec_helper.rbにrequireを書く。

CircleCI をコマンドライン(ローカル)で走らせる

結論 1. コマンドをインストール $ curl -o /usr/local/bin/circleci https://circle-downloads.s3.amazonaws.com/releases/build_agent_wrapper/circleci && chmod +x /usr/local/bin/circleci 2. YAMLを書いてコマンドを実行 カレントディレクトリにcircle…

Ubuntu 16.04 LTS において PHP で zip を扱うとエラーが出てしまう(動作しない)場合

結論 Zip拡張モジュールを下記のようにインストールする。 $ sudo apt-get install php-zip 備考 検索してもなかなか出てこないので少々ハマりました*1。 *1:検索の仕方が悪いのかも

ActiveRecord::Relation のオブジェクトから生データ(FixnumクラスやStringクラスのオブジェクト)を取り出す方法

結論 以下の順序に沿っていきます。説明を分かりやすくするため*1、一部で正確ではない表現を使っています。 *1:分かりやすくなっているだろうか……

Legato を用いたコードを抽象化する

Legato Google Analytics の API を扱うときに便利な gem です。 ベタ書きで実行はできるけれど 以前に書いた記事のとおりにコードを書いていけば Legato を用いて Google Analytics の結果を取得することができます。しかしこのコードは(分かりやすさのた…

Legato でフィルターをかける方法

Legato Google Analytics の API を扱うときに便利な gem です。 検索結果に対して「フィルター」をかける 例えば、昨日のサイトのページビュー数を取得したとします。その中から「ページビュー数が1000以上のもの」を抽出したい場合には「フィルター」をか…

Legato でプロファイル(ビュー)を選ぶ方法

Legato Google Analytics の API を扱うときに便利な gem です。 ビューを選択する APIの認証が済んだユーザは次の段階で「ビュー」を選択することになります。その際の選択方法を記します。以下、認証が済んだユーザのオブジェクトを ga_user とします。ま…

Google Analytics API 用の gem である Legato を使う

Legato Google Analytics の API を扱うときに便利な gem です。 ごくごく基本的な使い方 Legato の詳しい使い方は 公式のREADME や 公式のWiki に詳しく載っていますが、やはりコードを実際に見て理解するのが一番良いと思いますので、コードベースで順を追…

Ruby で Time.parse メソッドを使うときは require 'time' してあげないといけない

結論 標題のとおりです。

Ubuntu 16.04 LTS で 「curl/curl.h そのようなファイルやディレクトリはありません」というエラーが出たとき

結論 以下のいずれかを実行(インストール)する。

Ubuntu 16.04 LTS で Python2 と Python3 の環境を virtualenv で切り替える

元の記事 以下の記事の超短縮版です。なお、タイトルにUbuntu 16.04 LTSとありますが、他の環境でも問題ないと思われます。 結論 以下のコマンドを叩いていけばよいです。最後のコマンドは virtualenv 環境に入るためのコマンドで、コマンド実行後に $ pytho…

Ridgepole でマイグレーションをするときに --apply オプションでは他のテーブルが消える

結論 --mergeオプションを使う

Embulk の input および filter プラグインでの「型」は、その場面を「抜け出す」ときの型を指定する

追記 追試してみたところ、本記事の内容はちょこちょこ間違っていると思われますので参考程度にご覧ください。 具体例 標題が分かりにくいので、具体例を示します。「その場面」とか、「抜け出す」とか、独自用語を使ってしまっていますが、そこは察してくだ…

Embulk の MySQL Input プラグインで incremental オプションを true にすると query オプションは使えない

※Embulk 関連の記事は完全な追試ができていないので、そういうこともある、くらいに捉えて頂ければ幸いです やったこと queryオプションで独自のSQLを書いた上で、incrementalオプションおよびincremental_columnsの設定について以下のようにしてembulk run…

Ridgepole で主キーを変更する方法(「id」カラムを作らないようにする方法)

Ridgepole Active Record ほぼ準拠のマイグレーションツールです。

Embulk の MySQL Output プラグインはテーブルが存在しない時は作成してくれる

結論 標題のままです。マイグレーションを経る必要がない一時的なテーブルにデータを放り込みたいときに大変便利です*1。 考察 ログを見ると当然の動きをしていました*2。 2017-09-25 13:43:55.888 +0900 [INFO] (0001:transaction): SQL: CREATE TABLE IF N…

Powered by はてなブログ