Carthageでライブラリを管理する
今までXcodeのライブラリの管理はCocoaPodで管理していましたが、メインの言語をSwiftに変更するのに合わせてCarthageを使ってみます。
CarthageのQuick Startを参考に進めます。
前提条件
macOSにHomebrewがインストールされていること
Carthageをインストール
インストール方法は、こちらに記載されています。
インストール方法は下記の3つの方法があります。
- パッケージをダウンロードしてインストール
- Homebrewでインストール
- ソースを取得しmake install
今回はHomebrewでインストールします。
$ brew install carthage
$ carthage version 0.29.0
carthage 0.29.0がインストールされました。
Cartfileを作成
プロジェクトのフォルダにCartfileを作成しインストールするライブラリを定義します。
今回のプロジェクトで使用するAPIKitを設定してみます。
github "ishkawa/APIKit" ~> 3.1
ライブラリをインストール
carthage updateでライブラリをインストールします。
platformを指定しないとiOS、Mac、tvOS、watchOSのプラットフォームのライブラリがビルドされます。
$ carthage update *** Cloning APIKit *** Cloning Result *** Checking out APIKit at "3.2.1" *** Checking out Result at "3.2.4" *** xcodebuild output can be found in /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/carthage-xcodebuild.yOJLMa.log *** Building scheme "Result-iOS" in Result.xcodeproj *** Building scheme "Result-Mac" in Result.xcodeproj *** Building scheme "Result-tvOS" in Result.xcodeproj *** Building scheme "Result-watchOS" in Result.xcodeproj *** Building scheme "APIKit" in APIKit.xcworkspace
iOS用のライブラリだけインストールしたい場合は、platformオプションでiosを指定します。
$ carthage update --platform ios *** Fetching APIKit *** Fetching Result *** Checking out APIKit at "3.2.1" *** Checking out Result at "3.2.4" *** xcodebuild output can be found in /var/folders/w7/_wr_6y2x1vddzkt6xqdd_cj40000gs/T/carthage-xcodebuild.7l8sek.log *** Building scheme "Result-iOS" in Result.xcodeproj *** Building scheme "APIKit" in APIKit.xcworkspace
carthage updateを実行するとプロジェクトフォルダにCartfile.resolvedが作成されます。
github "antitypical/Result" "3.2.4" github "ishkawa/APIKit" "3.2.1"
ビルドしたライブラリは、Carthage/Build/iOSに保存されます。
Cartfileに設定したAPIKitはCarthage/Build/iOS/APIKit.frameworkが作成されます。
FrameworkをXcodeのプロジェクトに追加
ビルドされたFrameworkをXcodeのプロジェクトに追加します。
Xcodeのプロジェクトを開き、TARGETを選択し「Linked Frameworks and Libraries」にビルドしたライブラリを追加します。
Run Scriptを設定
Build Phasesの+ボタンから「New Run Script Phase」を選択しRun Scriptを追加します。
Shellの下のScript欄に下記の内容を追加します。
/usr/local/bin/carthage copy-frameworks
Input Filesを設定
Input Filesに使用するFrameaorkのパスを追加します。
$(SRCROOT)/Carthage/Build/iOS/APIKit.framework $(SRCROOT)/Carthage/Build/iOS/Result.framework
確認
今回は、APIKitを追加したのでFrameworkが使用できるかimportしてビルドしてみます。
問題なくビルドできました。
これでとりあえず開発を進められます。
Visual Studio Codeでruby-debug-ideを使ってデバッグ
会社では開発メンバーそれぞれが好きなエディタを使ってRailsのアプリ開発を行なっています。
以前はAtomを使っていましたが、Atomにプラグインを入れすぎたからか重くなったので
ここ1年くらいはVisual Studio Codeを使いデバッグはpryです。
Visual Studio Codeを使っていると右側にDebuggingアイコンが表示されています。
今まであまり気にしていなかったのですが
これ、どうやって使うんだと思い使ってみました。
デバッガーをインストール
ruby-debug-ideとdebaseをインストールします。
必要なGemをGemfileに追加
ruby-debug-ideとdebaseをGemfileに追加します。
gem "ruby-debug-ide" gem "debase"
bundle install
$ bundle install --path vendor/bundle
ruby-debug-ideをインストール
$ gem install ruby-debug-ide
アプリを実行してみる
構成の追加
Visual Studio codeの左側のDebuggingアイコンを選択するとデバッグビューが表示されます。 デバッグビューには変数、ウォッチ式、コールスタック、ブレークポイントがあり、上部のプルダウンメニューに「構成がありません」表示されています。
このプルダウンメニューから「構成の追加...」を選択すると環境(言語)が表示されるのでRubyを選択します。
Rails serverを選択
Rubyを選択すると、.vscode/launch.jsonが作成されデバッグビュー上部のプルダウンメニューに下記の項目が表示されます。
- Debug Local File
- Listen for rdebug-ide
- Rails server
- RSpec - all
- RSpec - active spec file only
- Cucumber
Railsのアプリをデバッグしたいので「Rails server」を選択します。
ブレークポイントの設定
ブレークポイントを設定したいソースを開きブレークポイントを設定したい行番号の左側をクリックすると、ブレークポイントが設定されデバッグビューのブレークポイントに表示されます。
実行
アプリを起動
デバッグビューの上部にある▶︎の実行ボタンをクリックするとアプリケーションが起動し、デバッグコンソールにログが出力されます。
ブレークポイントを設定したページを開く
ブレークポイントを設定したページを開くとブレークポイントを設定したところで停止し、デバッグビューに変数の状態が表示されます。
変数を右クリックするとメニューが表示されます。
「デバッグ:ウォッチに追加」を選択すると変数がウォッチ式に追加され状態を確認できます。
続行、ステップオーバー、ステップイン、ステップアウト、再起動、停止ボタンでデバッグを続けます。
デバッグコンソールの下の入力エリアに変数名を入力しエンターキーを押すと、デナッグコンソールに変数の状態を表示できます。
久々にIDEのデバッガを使ってみました。
RailsでLIKE句のキーワードをサニタイズする
RailsでLIKE句のキーワードをサニタイズする場合、sanitize_sql_likeヘルパーを使います。
下記のようにモデルにスコープを定義しLIKE句で検索してみます。
class Setting < ApplicationRecord scope :search, ->(keyword) { where('setting_key like ?', "%#{sanitize_sql_like(keyword)}%") } end
このメソッドをrails cで実行してみます。
[2] pry(main)> Setting.search("100%abc") Setting Load (0.7ms) SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\%abc%')
%がエスケープされます。
[6] pry(main)> Setting.search("100_abc") Setting Load (6.0ms) SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\_abc%')
_がエスケープされています。
[9] pry(main)> Setting.search("100\\abc") Setting Load (0.6ms) SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\\\abc%')
\がエスケープされています。
実行環境
Railsのモデルのhas_manyに外部キーを指定する
Railsで開発しているとRailsの規約に乗っていればサクサクと開発できることが多いのですが、ときどきレールから外れないとしょうがない場合があります。
例えば別のシステムで開発したテーブルを利用する場合に、参照先のテーブルのIDがRailsの規約と合っていない場合があります。
fugasというテーブルにhogesテーブルのidを保持する場合、Railsの規約ではhoge_idとなりますが、規約から外れてhogehoge_idになっていた場合など一手間必要です。
Hogeモデルにhas_manyでfugasを指定したい場合は、has_manyにforeign_keyで外部キーのhogehoge_idを指定します。
こんな感じ
class Hoge < ApplicationRecord has_many :fugas, foreign_key: 'hogehoge_id', class_name: 'Fuga', dependent: :destroy end
Let’s EncryptでSSL証明書の更新作業から解放されたい
Let’s Encryptは2016年4月に正式に開始された認証局で、無料で利用できるSSL証明書を提供しています。
Let’s Encryptのコマンドライン、certbotを使用するとSSL証明書の取得や更新が自動化できるようになります。
SSL証明書のインストールって簡単だけどなんか煩わしくて嫌な作業だったりします。
そういう面倒な作業からは解放されたい!
いつもそう思いながら作業してます。
最近は、Google Chrome 66, 70 の対応でSSL証明書の更新作業がいくつもあったりと....
そこで、Let’s Encryptを試してみました。
Let’s Encryptのコマンドライン、certbotを使用するとSSL証明書の取得や更新を自動化できるようになります。
SSL証明書の取得かたnginxの設定までコマンド一発でやってくれたりします。
SSL証明書の更新もcronなどで実行すれば自動化も可能です。
かなり楽です。
楽すぎます。
SSL証明書の取得方法や更新方法などアトトックラボの方にまとめました。
atotok.co.jp
まずは社内の開発環境をLet’s Encryptに移行してみようかと思います。
自社のサイトもLet’s Encryptでいいかも。
受託開発でもスマホアプリと連携するようなサイトなどLet's Encrypで十分じゃないのかな?
しばらく使ってみてどこまで利用するか検討してみようと思います。
Dialogflowでチャットボットの開発
最近、チャットボット関係の開発の話があり独自実装だったり、いろんなサービスを試したりしてます。
今回は最近使ってみたGoogleのDialogflowを紹介したいと思います。
DialogflowはGoogle HomeやGoogleアシスタントで実行できるアプリの開発が可能です。
また、DialogflowのIntegrationsから色々なサービスのボットを作成できます。
こんな感じ
- Google Assistant
- Slack
- Viber
- Twilio IP
- Twilio (Text messaging)
- Skype
- Tropo (Text messaging)
- Telegram
- Kik
- LINE
- Cisco Spark
- Amazon Alexa
- Microsoft Cortana
Dialogflowを利用して簡単なチャットボットの作成手順をAtotok Labo
の方にまとめました。
こちらでは、Dialogflowでチャットボットを作成し動作確認までの手順をまとめています。
シミュレータで実行する時にGoogleのアカウントの設定の影響でうまく動作しなかったりしたので解決方法なども記載しています。
atotok.co.jp
Webhookなど利用して外部サービスとの連携もできるので試したらこちらでも紹介したいと思います。