Close icon

アトトックラボ

2023月10日19日

RailsのプロジェクトのRubyをバージョンアップ

現在、Railsアプリの開発環境では、Ruby 2.7.6を使用しています。
開発中のプロジェクトから、最新版のRuby 3.2.2にアップデートしていこうと思います。

開発環境

  • macOS 12.6
  • Rails 6.1.7.6
  • Ruby 2.7.6
  • rbenv 1.2.0

ruby 3.2.2をインストール

rbenvでruby 3.2.2をインストールしようとするとエラーが発生しました。

$ rbenv install 3.2.2
To follow progress, use 'tail -f /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/ruby-build.20231019164019.8039.log' or pass --verbose
Downloading openssl-3.1.2.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539
Installing openssl-3.1.2...
Installed openssl-3.1.2 to /Users/kuru/.rbenv/versions/3.2.2

Downloading ruby-3.2.2.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz
Installing ruby-3.2.2...
ruby-build: using readline from homebrew
ruby-build: using gmp from homebrew

BUILD FAILED (macOS 12.6 using ruby-build 20230717-11-g4d4678b)

Inspect or clean up the working tree at /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/ruby-build.20231019164019.8039.2vbRCR
Results logged to /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/ruby-build.20231019164019.8039.log

Last 10 log lines:
  Check ext/psych/mkmf.log for more details.
*** Fix the problems, then remove these directories and try again if you want.
Generating RDoc documentation
/private/var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/ruby-build.20231019164019.8039.2vbRCR/ruby-3.2.2/lib/yaml.rb:3: warning: It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
uh-oh! RDoc had a problem:
cannot load such file -- psych

run with --debug for full backtrace
make: *** [rdoc] Error 1
2023月06日30日

[Rails]ActiveDecoratorをControllerで使う

環境

Rails 6.1.7.2

やりたいこと

  • プログラムのコードをcodeタグを使って表示するため、コードの行ごとにspanタグを追加したい。
  • spanタグの追加処理はDecoratorで実装したい。
  • プログラムのコードはAPIで取得しているため、コントローラーでDecoratorを使用したい。

実装方法

sample_codesテーブルのsourceにプログラムのソースがテキストで保存します。
Decoratorにソースコードの1行ごとにspanタグを追加するメソットsource_codeを実装します。

SampleCodeDecorator

  
module SampleCodeDecorator
  def source_code
    lines = source.split("\n")
    source_code = ''
    lines.each do |line|
      source_code += "#{line}"
    end
    source_code
  end
end
  

APIのコントトーラーからSampleCodeDecoratorのメソッドsource_codeを実行するとエラー

sample_codes_controller.rb(修正前)

  
class Api::SampleCodesController < Api::ApiController
  def source
    sample_code = SampleCode.find(params[:sample_code_id])

    response = {}
    response[:title] = sample_code.title
    response[:source_code] = sample_code.source_code

    render json: response
  end
end
  

この状態で実行するとundefined methodになってしまいます。

NoMethodError (undefined method `source_code' for # Did you mean? source): app/controllers/api/sample_codes_controller.rb:8:in `source'

Viewで使用する時はActiveRecordのオブジェクトからDecoratoerのメソッドが自動的に実行されますが、コントローラーでActiveDecoratorを使いたい場合は、Decoratorのインスタンスを生成して使用します。

2022月10日13日

ファイルアップロードでMySQL client is not connected

RailsアプリでアップロードしたファイルをDBに保存する機能があり、
5MB程度のファイルでは問題なかったのですが、10MB程度のファイルをアップロードすると下記のエラーが発生しました。

ActiveRecord::StatementInvalid (Mysql2::Error: MySQL client is not connected):

BLOBのカラムにデータを保存する場合には発生しやすい現象なのでメモしておきます。


2022月07日07日

Railsでscaffoldを使ってテーブルを作成

Railsのアプリケーションを開発する時に各機能を実装するためのMVCを作成しますが、実装する機能が増えるとMVCの作成が手間に感じる時があるかと思います。

そんな時に便利なscaffoldのコマンドについて書こうと思います。

2022月06日17日

Railsで数字をカンマ区切りで表示する

入社2年目、若手プログラマーの上條です。
基礎的な知識があれば数秒で解決してしまうような事に日々躓きながら勉強中です。

今回はそんな若手プログラマーからの目線でカンマ区切りの処理について書いていこうと思います。

2019月10日30日

Railsでrescue_fromを使ってエラー処理を共通化する

Railsのコントローラクラスのrescue_fromメソッドは、例外が発生した場合に実行するメソッドを指定できます。

コントローラーで独自のエラページをエラー内容によって切り替えたり、
APIでエラーが発生した場合に処理を共通化する場合などrescue_fromメソッドを使うとスッキリします。

ということで、APIのエラー処理の共通化を考えてみます。

各APIコントローラーのスーパークラス

各APIコントローラのスーパークラスを作成し、サブクラスで発生した例外は全てここでハンドリングします。
Api::TuleApiErrorが発生した場合、Api::ApiControllerのtule_api_errorメソッドが実行されます。
下記の例ではトークンが不正な場合は、HTTPステータスを401 Unauthorized、それ以外の場合は200 OKを返しています。
HTTPステータスは、例外の内容によって適切な値を設定します。

class Api::ApiController < ActionController::API
  include ActionController::HttpAuthentication::Token::ControllerMethods

  rescue_from Api::TuleApiError, with: :tule_api_error  

  protected
  # トークン認証
  def authenticate

  ・
  ・
  ・

  end

  private
  # エラー時のレスポンスを返す
  def tule_api_error(e)
  header = {result: e.code, message: e.message}
  response = {header: header}
  status = :ok
  status = :unauthorized if e.code == Api::Result::HTTP_TOKEN_ACCESS_DENIED
  render json: response, status: status
  end

end

上記のコードでApi::Resultはエラーコードを定義しているクラスです。

2019月09日25日

$_>アトトックの開発チームの話<_$ (1) - それぞれに得意な分野を持った開発チーム

弊社のデザインチームの話の連載をはじめたのに、開発チームの話はいいのか?っていう自問自答。そんなわけで開発チームのことも別連載として今回からスタートします。

2019月08日07日

loggerjs の話と製品開発から生まれる成果物

個人の GitHub でですが・・・loggerjs を公開してみました。loggerjs は JavaScript でフロントエンドの開発を行う際に欠かせない console.log をもうちょっとうまいこと使いたいって願望から開発しました・・・なーんて書いてみるのもいいんですが、実際はそういう console.log を使った作業が、TAppKit の開発自体、そしてそれを利用している NikoNikoLog の次期大規模アップデート の開発には必要不可欠な状態になったことから、もともとは TAppKit への組み込みライブラリとして CoffeeScript で開発していたものを、コンパイル不要で弄りたい人は弄りたい放題になるはずの JavaScript に書き換えて公開しました。

loggerjs の概要

loggerjs は、以下のようにウェブブラウザの開発ツールの Console にログを出力します。

loggerjs

機能としては単純なものが多いのですが、主な機能は以下の通りです。

  • DEBUG, INFO, WARN, ERROR の4つのログのレベルに対応
    • 各レベルのログは接頭辞にレベルをつけて、指定された色(オプションでも設定可能)で出力
  • 初期化時に動作環境を設定してやることが可能(後述)
  • オプションでログの出力元の情報も付与可能、省略も可能(スクリーンショットの [INFO] ↳ MobileNikoNikoLogApp の部分はログの出力元)
2018月07日29日

Raspberry Pi の Rails で Hue をコントロールできるようにしてみた

土曜日の朝、仕事をしていたら最近あまり使っていない Raspberry Pi と本体ジャストサイズの多分 3.5 インチくらいのタッチパネルがあったので、書斎用に時計を作ってみました。

時計自体は HTML と JavaScript と CSS でなんとかなるなー、と思ったのですが、どうせなら部屋の照明(自宅の照明は基本的にほとんど Hue)もコントロールしたくなってしまって、じゃあ Rails で作ってみようと。なので HTML は haml、JavaScript ではなくて CoffeeScript で書いたんですが・・・。ちなみに時計の下に表示されている天気はテキトーに API 叩いて取ってるんですが、今回はそっちは端折ります。

そんなわけで Hue を Ruby から扱う方法の備忘録。

2018月07日20日

Visual Studio Codeでruby-debug-ideを使ってデバッグ

弊社の開発メンバーは、AtomやVisual Studio Code、Emacsなどそれぞれが好きなエディタを使用してRailsのアプリ開発を行なっています。

私は以前はAtomを使っていましたが、Atomにプラグインを入れすぎたからか重くなったので
ここ1年くらいはVisual Studio Codeを使っています。
Railsのデバッグはpryです。

Visual Studio Codeを使っていると右側にDebuggingアイコンが表示されています。
今まであまり気にしていなかったのですが
これ、どうやって使うんだと思い使ってみました。


アトトックラボとは

株式会社アトトックメンバー が技術の話、デザインの話、キャラクターの話、ときどき脱線してガジェットの話やライフハックの話など好きなことを書いています。


連載記事


最近の記事


タグ