投稿

2018の投稿を表示しています

AWS DEV DAY 2018に行ってきました

イメージ
3日間の開催でしたが、最終日11/2(金)の主にStartup Technologyトラックを聴いてきました。 Amazon Pinpoint x グロースハック活用事例集 登壇者 ・AWS 塚田さん ・ピクシブ 石川さん ・RoomClip平山さん 塚田さんは主にPinpointの説明 「なな転び八起のAWS 開発日記」のモデルにもなってる方。 https://aws.amazon.com/jp/about-aws/whats-new/2018/08/aws-launch-social-manga/ 石川さんは Palcy の説明。そこでの利用事例のお話でした。 重量課金性とメールも送れるのが採用のポイントだったそう。Reproとも併用しているとのことでしたが、価格差が数十倍というのが衝撃でした。 平山さんは RoomClip のサービス説明。ユーザーが段階的に増えていく過程で要望も変わり、プッシュの仕組みも変えていって、現在はPinpointを利用しているとのこと(ただし、まだ最小構成での利用でフルで活用はまだできていないよう。JSONまで自社で生成して送信処理をPinpointでおこなう) 話の中で最初は、全員に送りたい。しばらくたって個別に送りたい。最近では、マーケティングツールとして使いたい。というのはすごいわかる!という感じで納得してしまいました。 COOがマネージドサービスで一人でスピード開発して得た知見 登壇者 ・MESON 小林 さん heymeshの紹介。ただしサービス自体は2018/09にクローズして、そこで得た知見などをお話されました。 サービスの開発自体は1ヶ月で作ったとのこと!サーバーレスで構築して、labmdaからfargateに処理を移行して時間のかかる処理を解決したなど。 データがストックされるアーキテクチャ設計は慎重にと。データ増加に伴い変更コストが高くなる(DynamoDBからAthenaへ移行したかったが難しい) 最後に chalice の紹介。サーバーレスを簡単に実装ができる。ただしpythonに限る サービスのクローズは将来的にマネージメントが難しいとの判断とのこと。 [AWS Startup ゼミ Dev Day 編] よくある課題を一気に解説!〜御社の技術レベルがア

EBに置いたrailsからAmazon Kinesis Data FirehoseでlogをamazonESに投げる

はじめに ちょっとググるとamazonESにログを送信するのにfluentd(td-agent)を利用するケースが多いですが、その場合以下のライブラリを利用するみたいなのが多く出てきます。 https://github.com/atomita/fluent-plugin-aws-elasticsearch-service ただ、メンテナンスされてないっぽいのと、Amazon Kinesis Data Firehoseを利用したほうが楽そうだったので設定してみました。 ※EBの設定はしてあるものとします Railsの設定 logrageでjsonのlog吐き出す 参考 https://qiita.com/ichi_s/items/7cf6ce5dbfaa00976dd4 Gemfile gem 'lograge' gem 'logstash-event' gem "rack-user_agent" config/initializers/lograge.rb Rails.application.configure do config.lograge.enabled = true config.lograge.base_controller_class = ['ActionController::API', 'ActionController::Base'] config.lograge.formatter = Lograge::Formatters::Logstash.new config.lograge.keep_original_rails_log = true config.lograge.logger = ActiveSupport::Logger.new "#{Rails.root}/log/lograge_#{Rails.env}.log" config.lograge.custom_options = lambda do |event| payload = event.payload data = payload.slice(*%i( uuid host

Xcode10対応

はじめに Xcode10になって対応した内容を簡単にまとめ エラー1 Multiple commands error when building with Xcode 10 いろいろ解決方法が出ているが(Copy Bundle Resource のinfo.plist削除、Product Module Nameをrenameなど)どれをやっても駄目なのでLegacy Build systemでとりあえず逃げる。(自分の場合はpods関連っぽいのでpodのupdateに期待) https://stackoverflow.com/questions/50718018/xcode-10-error-multiple-commands-produce エラー2 2018-09-22 12:34:06.586869+0900 Nekostabe[2645:713106] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to allocate data stores for 2147483647 rows in section 8. Consider using fewer rows' 結構ハマりましたが、enumの値を取得する箇所で、rawValueするべき箇所がなぜかhashValueになっていて正しい数字が返らずエラーになっていた(今まではたまたま動いていた?)。 例 enum RowIndex { case header case content case footer case count } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //return RowIndex.header.hashValue 今までは大丈夫だったが、今回動かなくなった return RowIndex.header.rawValue } ついでにswift 4.2から採用されたe

Active StorageはまだPublic URL(ファイル)に対応していない

イメージ
ねこすたで新規に画像を登録する必要が出てきたので、今までは paperclip を利用していましたが、5.2からActiveStorageが正式に出たのでそっちを利用しようかなと思いました。 そのために5.1から5.2にアップグレード実施(とくに問題なく完了)。 ねこすたの画像はS3にファイルを置いて、CloudFrontで表示するようにしています。 が、しかしActive StorageはまだPublic URL(ファイル)に対応していない! https://github.com/rails/rails/issues/31419 https://stackoverflow.com/questions/50676891/rails-activestorage-link-to-cloudfront 作者が言ってます 対応は未定。 困ったということで、まだActive Storageに移行は早かった。paperclipもDeprecatedになってるので、ほかのライブラリも検討中。 普通のWEBサイトならいいけど、API向けにはまだ利用は早いかもしれない(用途によるけど)

APNs証明書を簡単に更新する方法

はじめに 1年に一回必ずやってくるAPNs証明書の更新。 非常に面倒でたまにしかやらないので、いつも忘れるのですが、これをコマンド一発でやってくれる便利なツールを紹介します。 Fastlane https://docs.fastlane.tools/actions/pem/ iOS、Androidアプリで簡単にdeployments、releasesファイルを作成してくれるやつです。 これにAPNs証明書の更新をコマンド一発でやってくれるツールが入っています。 まずは、fastlaneをインストール https://docs.fastlane.tools/ $ gem install fastlane iOSプロジェクトのカレントディレクトリに移動して以下を実行 $ fastlane init Gemfileとlockファイルが作成されます。 Fastfileを作成するとAppStoreへのアップ、TestFlightへのアップなどコマンドでできるようになりますが、その話はまた今度。 APNs証明書の更新 以下コマンドを実行 $ fastlane pem [✔] 🚀 [18:53:21]: fastlane detected a Gemfile in the current directory [18:53:21]: however it seems like you don't use `bundle exec` [18:53:21]: to launch fastlane faster, please use [18:53:21]: [18:53:21]: $ bundle exec fastlane pem [18:53:21]: [18:53:21]: Get started using a Gemfile for fastlane https://docs.fastlane.tools/getting-started/ios/setup/#use-a-gemfile +-------------------+------------------------+ | Summary for PEM 2.101.1 | +------------------

YPImagePickerで加工動画が変換できない

ねこすたの画像投稿ではインスタ風UIを採用しています。 そこで利用しているのが、 YPImagePicker というライブラリ。 かなり便利で重宝しているのですが、ある日こんな問い合わせが。 "LINEカメラで作成した動画があげることができない。" ためしてみると、確かにライブラリ画面から選択して次へ進めなくなってしまいます。 デバッグログを確認すると、以下エラーが出てました。 PHCachingImageManager >>> Problems with audio track githubにも同様のissueが上がっていました。 https://github.com/Yummypets/YPImagePicker/issues/199 そのissueも反応ないようなので、修正してPRでもしようとおもいcloneして動作確認。 あれ、普通に動く。 該当の箇所の差分を見ると修正されているようでした。 https://github.com/Yummypets/YPImagePicker/commit/a6e847cfb822706c49fecf3c831814446b4e0fa2 v3.4.0で発生していて、上記修正バージョンはタグがまだ振られていない状態。 masterを参照するようにすれば治りました。 いちおうコメントもしておきました。 https://github.com/Yummypets/YPImagePicker/issues/199#issuecomment-413077398

bitnami@wordpressでVirtualHostを設定する方法

bitnami@wordpressとは? EC2でwordpressを簡単に構築できるパッケージになります。 AWS MarketplaceでAMIとして提供されています。 AWSの チュートリアル としても利用されています。 本家で紹介されている設定 通常の設定であれば、EC2を立ち上げて何もしないで完了です。 VirtualHostを利用する場合はconfigを変更する必要があります。 本家サイト に設定方法が書かれています。 このファイルに記載されている /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf Include "/opt/bitnami/apps/myapp/conf/httpd-prefix.conf" を消して Include "/opt/bitnami/apps/myapp/conf/httpd-vhosts.conf" を追加 apacheをrestartして完了。 と思いきや、以下のエラーが出ます。 <VirtualHost> cannot occur within <VirtualHost> section apache config test fails, aborting 原因 /opt/bitnami/apache2/conf/bitnami/bitnami.conf 8 <VirtualHost _default_:80> 9 DocumentRoot "/opt/bitnami/apache2/htdocs" 10 <Directory "/opt/bitnami/apache2/htdocs"> 11 Options Indexes FollowSymLinks ... 25 # Bitnami applications installed with a prefix URL (default) 26 Include "/opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefi

メッセージUIライブラリMessageKitの紹介

はじめに ねこすたでは投稿された画像、動画にコメントをすることができます。 そのコメント欄はLINE風のUIにしているのですが、そこで採用したライブラリが JSQMessagesViewController でした。 しかし、そのライブラリが去年(2017/07)にDeprecatedになってしまいました。 作成者理由 しばらくはJSQMessagesViewControllerを利用していましたが、pod install,updateするたびにDeprecatedが表示される始末。。最近になってコメントのところをいろいろ改修する必要が出てきたのでいい機会なのでライブラリを変更することにしました。 JSQMessagesViewControllerの issue でちょうどよさそうなライブラリを発見。評価も良さそう Exampleを動かして良さそうなので採用することにしました。 使い方 インストールは README 参照 そして、、使い方がどこにも書いてない!! Exampleがあるのでそれを見ながら実装することに。 まずはMessagesViewControllerを継承したControllerを作成。 class ConversationViewController: MessagesViewController { var messageList: [MockMessage] = [] // 各メッセージ内容を格納したList 継承したクラスにmessagesCollectionViewという変数があるのでこいつが、UIのcollectionViewになります。 各delegateを設定 override func viewDidLoad() { super.viewDidLoad() ... messagesCollectionView.messagesDataSource = self messagesCollectionView.messagesLayoutDelegate = self messagesCollectionView.messagesDisplayDelegate = self messagesCollectionView.messageCellD

FunBizのシステム環境

FunBizとは クラウド販売管理システムになります。 販売管理とは見積り、受注、発送、入金、仕入れなどの流れを管理します。 既存製品だとパッケージ製品が多いのですが、FunBizはインストール不要でブラウザでアクセスして即利用することができます。 サーバーサイド Ruby 2.4.3 Ruby on Rails 5.1.6 フロントエンド Reactを利用しています。 webpackerを利用してJSライブラリを管理(名残でSprocketsも併用中) 全部がReactになっているわけではなく(SPAではない)、動的な箇所がおおいところをReactで対応(react-rails)。 その他はerbで(turbolinksと併用) ジョブ(非同期処理) メール送信、エラー通知(Slack)、ファイルアップロードなど時間のかかる処理はジョブで処理をしています。 ジョブはsidekiqを利用 ミドルウェア Nginx 1.12.1 Puma 3.11.4 Redis 3.2.11 memcached 1.5.4 DB MySQL 5.6 サーバー環境 ステージング Herokuを利用 Puma、Sidekiqのプロセスをhobby dynosで立ち上げ Heroku Redisを利用 DBはAWS RDSに接続 本番 AWSを利用 ・EC2(負荷状況によりautoscaling) ・RDS(MySQL) ・ElastiCache(Redis) ・S3(画像保存など) ・ALB ・CloudFront ・SES デプロイ ステージングはHerokuに自動deploy(developが更新されると) 本番はAWS Elastic Beanstalkを利用(masterが更新されるとdeploy) CI環境 SideCI を利用して自動コードCheck テストコードが充実してきたら、テストを流すCIも入れたい(利用顧客も増えてきて影響範囲が大きくなってきたので、テストコードを誠意作成中) おわりに 前回はねこすたの環境をお伝えしましたが、今回はFunBizの環境を簡単にお伝えしました。 初回無料トライアルもありますので、ぜひご利用ください!

ねこすたのシステム環境

ねこすたとは ねこ画像を専用としたSNS投稿アプリになります。 投稿した写真にいいね、コメントなどができたり、Q&A機能で普段気になる疑問質問などを投稿したり、他のネコ好きの方が回答してくれたりと交流も図れます。 定期的にイベントなんかもやっており、イベントタグをつけて投稿して、抽選で当選者にはプレゼントもしています。 最近は投稿した画像をカレンダーにするサービスもはじめました。 ねこ好きのかたはぜひ! https://necosta.funseek.co.jp/ フロント iOS Swift 4.1 各種ライブラリはCocoaPodsを利用(結構いろいろなライブラリを利用しています。別の機会で紹介できれば) Android まだ未リリース kotlinで開発予定 バックエンド Ruby 2.4.4 Rails 5.1.6 その他ライブラリはGemで管理 はじめはRails 4.1から始まり4.2,5.0,5.1とアップグレードしてきました 5.2に近々アップグレード予定 ミドルウェア Nginx 1.12.1 Puma 3.11.4 Redis 3.2.11 Rails4時代はUnicornを利用していましたが、5に変わるときにPumaに変更しました。 DB MySQL 5.6 文字コードはutf8mb4 サーバー環境 ステージング Herokuを利用 Puma、Sidekiqのプロセスをhobby dynosで立ち上げ Heroku Redisを利用 DBはAWS RDSに接続 本番環境 AWSを利用 ・EC2(負荷状況によりautoscaling) ・RDS(MySQL) ・ElastiCache(Redis) ・S3(画像保存など) ・ALB ・CloudFront ・SES デプロイ iOS テスト配信はFabricを利用していたが、最近やたらアップロードが遅かったりするので、DeployGateを利用 本番申請前はTestFlightでも配信 サーバーサイド ステージングはHerokuに自動deploy(developが更新されると) 本番はAWS Elastic Beanstalkを利用(maste