読者です 読者をやめる 読者になる 読者になる

mazeltov7のweb断片

備忘録的なテキトーなことを書きます。間違ってたり、ツッコミあればお願いします。

サイトに入ってきてもらえるように準備する(Rails, SEO)

Rails

サイトに流入が欲しい

ネタサイトや練習サイトであってもちょっとは流入して欲しい、ってことで、にわかSEO対策をしてみることに。

Google Analytics対応する

まずはこれ。google-analytics-railsというgemを使う。
1.google analyticsのサイトで新しいアカウントを作成する。
2.すると、トラッキングIDもらえるので、それをconfig/environments/production.rbに書く。

# replace this with your tracker code
GA.tracker = "UA-112233-4"

3.application.html.erbに以下を入れる。

<%= analytics_init if Rails.env.production? %>

完了。

Google Search Console対応する

これ。Search Console とは - Search Console ヘルプ
とりあえず、利用するサイトでアカウント開設して、中身をざっと見てみる。なんかいじってるとgoogleから「検索パフォーマンス改善できます」ってメッセージきて、改善点を指摘してくれた。

tagを良い感じに対応する

このgemを使う。meta-tags
この辺りのブログに導入仕方詳しいので、そちらに譲る。
meta-tags で Rails アプリの SEO は万全に - Qiita
meta-tagsとsitemap_generatorで始めるRails 3.2のSEO対策 | 酒と涙とRubyとRailsと

site-mapに対応する

Search Consoleのアドバイスでも、「サイトマップあると良いよ」とあったので、対応する。sitemap_generatorというgemを使う。
1.Gemfileに追加して、bundle installする。 2.config/sitemap.rbを作成する

$ rake sitemap:install

3.sitemap.rbを編集する

SitemapGenerator::Sitemap.default_host = 'http://example.com'

4.public/以下にsitemap.xmlを生成する

# Development/Testの場合(pingをsearchエンジンに送付しない)
$ rake sitemap:refresh:no_ping
# Productionの場合(pingをsearchエンジンに送付する)
$ rake sitemap:refresh

[追記]
5. heroku使ってたんだけど、herokuでsitemap.xml扱えなかったので、S3に送って対応するというのをやる

ひとまず

こんなところで様子見る。気が向いたらアップデートする。

最高の.rubocop.ymlを求めて

Rails ruby

3年ぶりのrubyでもはやnoob過ぎるので、最高のrubocop環境が欲しい。

RubyMineにrubocopのプラグインがあるので、それを入れている。で、デフォルトの設定を上書きする.rubocop.ymlをどんな感じにすると一番最高なのか知りたい。見つけたやつを以下に置いておく。

qiita

2013年と前のやつだけど、qiitaでの.rubocop.ymlが置いてある。
Rubocopを使ってコーディングルールへの準拠チェックを自動化 - Qiita

rails

railsのrepositoryに.rubocop.yml置いてあった。
rails/.rubocop.yml at master · rails/rails · GitHub
これを使うと、single qoute, double quoteのところで、ruby規約とrails規約でぶつかる事例があった。

おまけ

sublime3環境を整える(Ruby)

Sublime Text

しばらく使ってなかったSublimeを使えるようにするぞ

JetBrainsをちょろっと使ってたけど、ライセンス切れてキレたので、Sublimeをセットアップする。
久方ぶりにRubyやるので、主にRuby向けに整える

SublimeCodeIntel

SublimeCodeIntel 補完欲しいってことで、こちらを入れる。定義ジャンプも対応してる。
1. sublime text開いて、ctr + shift + pでパッケージマネジャーを開く。
2. Package Control: intall packageを選択
3. SublimeCodeIntelを選択

SublimeLinter

Welcome to SublimeLinter 3 — SublimeLinter 3.4.24 documentation 文法チェックもして欲しいので、SublimeLinterを入れる。
1. sublime text開いて、ctr + shift + pでパッケージマネジャーを開く。
2. Package Control: intall packageを選択
3. SublimeLinterを選択
次に、各言語向けのプラグインを入れていく
- SublimeLinter-rubyを入れる
その他、jsとかのも入れておくと良さそう。

検索窓が日本語に対応してない問題への対応

日本語で検索しようとしてもうまくいかないケースへの対応。下記リンクにそってやればOK。
Sublime Textの検索窓に日本語を入力する方法 · GitHub

rubocop

コーディング規約のSublimeLinterプラグインあるので、それ入れとく。
SublimeLinter-rubocop
rubocopについては下記。
Rubocopを使ってコーディングルールへの準拠チェックを自動化 - Qiita

これでちょい様子を見る。

ツイキャス主専用マッチングiOSアプリ「キャスコン」をつくってリリースしてみた

作ってみた swift Firebase Node.js

今年1月くらいにツイキャス新APIが公開され、それに伴って先日開かれたツイキャスハッカソンを遠くから見ていて感化されてしまい、ついかっとなって作って、リリースしましたツイキャスAPIを使ったものだったらネタは何でも良かったんですが、ツイキャス主が配信をしていない配信外の時間に新しいキャス主を見つけて仲良くなってもらえるといいかなと思って、マッチングアプリにしてみました。

キャスコン

f:id:mazeltov7:20170323122414p:plain

ダウンロードはこちら

構成

  • Swift3
  • Firebase
  • Node.js

開発中のトピック

ツイキャスAPI

ツイキャスアカウントでログインして、ユーザーのプロフィールや過去の配信画像を取得するのに利用しました。APIv2はまだベータ版で、これからも更新ありそうな気がするけど、ツイキャス配信用のURL(RTMP)を取得できたり、新着のライブをリアルタイムに WebSocket 経由で取得もできたりと、実はできること結構あって作れるモノの幅は広いと思うのでオススメです。[PR]

Firebase Authentication

Firebase認証では、

に対応していて、今回はツイキャスでログインを実装するために、カスタム認証を利用しました。ツイキャスのアクセストークンの検証と、ユーザーに対応するFirebaseカスタム認証トークンを生成するために別途サーバーが必要になるので、nodeでサーバーを立てて対応しました。(カスタム認証でない場合は必要ありません)

Firebase AuthでLINEログインを実装した記事があったので、そちらを参考にさせてもらいました。 Authenticate your Firebase users with LINE Login

ちなみに、今回やりたいことをやるためには、サーバー側に管理者権限のあるFirebase admin SDKを入れる必要があり、サービスSDKの方を入れてて少しハマりました… サーバーに Firebase Admin SDK を追加する

Firebase Realtime Database

アプリのチャットやマッチ機能を実装するのに利用しました。Firebase Realtime DatabaseはNoSQLデータベースで、あまりしっかり使ったことがなかったので、先にwebアプリとして実装してから、それをベースにアプリに適応しました。 非同期でデータを取るのに適していて、チャットなどはかなり楽に実装できました。

// messageをリッスンして取得する
let handleRef = messageRef.observe(.childAdded, with: { (snapshot) in
    let messageDict = snapshot.value as? [String: Any]

不安があるとすれば、Firebase Status Dashboardを見ると、ちょいちょい気軽に落ちたりしてることですかね…

Firebase Cloud Messaging

通知機能もFirebaseにあるということで使ってみました。別途サーバーを立てる必要があるのですが、使い勝手は良かったかなと思います。 (細かいですが、通知を送る際に、priorityをhighにしておかないとバックグラウンドへ行った時に通知が届かないというのは少しわかりにくかったです。) あと、Firebaseのコンソールから端末やグループに通知を送れる機能も使えます。

サービスとしては良かったんですが、APNs 証明書をFirebaseにアップロードできないというバグがあって、サポートに連絡して対応してもらったのですが、解決に3週間くらいかかってて、そこはつらみありました。

OneSignal

結局Firebaseサポートの解決を待てなかったので、評判の良さそうなOneSignalを使いました。 完全無料で、APNs証明書周りの取得・アップロードも自動化を試みていたりと、良い感じです。コンソールから通知送れる機能や、通知のA/Bテスト機能もあります。アプリを入れてる端末名称・国・アプリバージョンなども取れるので、それを元にセグメント化して通知の使い分けもできます。

Firebase Analytics

イベント取得やコホート、セッション、エンゲージメントと一通りデータを取れます。BigQueryとつなげることで、より使い勝手がよくなる模様ですが、これからいじってみようと思います。

その他

ここ1,2年、仕事ではビジネス側のマネジャー業務をやっており、swiftは初学者でしたが、早く出すぞの精神でアプリ開発自体は3週間くらいでできたのですが、アプリ初心者にとっての難関はアップルの審査でした。(早く出すぞの精神が裏目に出て、抜け漏れがありました…)リジェクトされること複数回、約6週間後にやっと審査が通りました。代表的なリジェクト理由を挙げますと、

1. アプリタイトルに価格に言及したものを含めてはいけない

例によって、アプリタイトルに「無料」とか入れてたんですが、審査でダメになったみたいですね。Twitterでも報告してる方がちらほらいました。

2. IPv6対応できてないぞ

ログイン認証や通知でAPI叩いてるところのサーバー側で、IPv6対応できてませんでした。自サーバーの方は大人しくすぐ対応したのですが、利用しているツイキャスAPI側はIPv6対応されていないけど、IPv6環境でアプリを試してみるとたしかに正しく動作したり、とちょっとよくわかっていません。

3. User-Generated Contentの対応をしなければならない

規約だとこちらですね。 1.2 ユーザー生成コンテンツ ユーザーがコンテンツを投稿できるアプリの場合はこの基準を満たしていないといけないということですね。

  • 利用規約を用意
  • 通報・ブロック機能を実装
  • 通報・ブロックを即時キャッチできる管理画面を作成

で、対応しました。

まとめ

色々初めてのものを実装してみて楽しかったです。 需要があれば、改善もしようと思うので、良かったらアプリ試してみて下さい。 キャスコン

【Xcode8】ビルドが成功しているのにiOSシュミレータが起動しないときの対処法

xcode

原因

  • Runの設定「Executable」が「None」になっている

対応

  1. 左上の△のRunボタンをoption押しながら、クリック。
  2. 設定画面出て来るので、Run->InfoのExecutableがNoneになってるところを、プロジェクト名に変更する。

Done

参考

IPv6に対応する(さくらVPS-CentOS6, お名前.com)

VPS

環境

  • OS:CentOS6.8(さくらVPS
  • ドメイン:お名前.com すでにIPv4で動いてるのを対応させる。

対応

事前チェック

自分のサイトがIPv6に対応してるかチェックできるサイト。
Is your site IPv6 ready?
- DNS (IPv6 AAAA Record)
- IPv6 Connectivity
でFAILしてるのを確認。

最近立ち上げたさくらのVPSだとすでにIPv6のある程度の対応されているみたい。

$ ifconfig -a
# で、eth0のところのinet6 addrがScope:LinkとGlobalもあれば一応対応されている

IPv6のアドレスを一応pingで確認

$ ping6 2001:XX:XX:XX:XX:XX:XX:XX 
# 対応されてる場合はこれで返ってくる

対応されている場合でも、

wget -6 hogehoge.com 
# -6はipv6での接続 (-6,  --inet6-only        connect only to IPv6 addresses.)

たぶんこれでconnection refuseされる。

IPv6 AAAA レコード対応

お名前.comでログイン後、「ドメイン設定」→「ネームサーバーの設定」→「DNS関連機能の設定」→対象ドメインを選択して「次へ進む」→「DNSレコード設定を利用する」
ここでAAAA Typeの、ValueにはIPv6のアドレスを入れて追加して保存する。
(サイトわかりにく(ry…) で、対応されたら、上のサイト(ready.chair6.net)でチェックする。PASSと出るはず。

IPv6 Connectivity対応

実は上記の対応だけでこれもチェックPASSする場合もある気がする。
わたしはここに習って設定反映したら、逆に通らなくなったがw (二重設定してる部分が原因だったorz)
IPv6アドレスの設定方法 – さくらのサポート情報

結局書いたのは、

$ vim /etc/sysconfig/network

NETWORKING_IPV6="yes"
IPV6_AUTOCONF=no
を追加

$ vim /etc/sysconfig/network-scripts/ifcfg-eth0

元々以下が書かれていたので一点だけちょっと修正したのみ。
DEVICE="eth0"
BOOTPROTO="static"
DNS1="XXX.XXX.XXX.XX"
DNS2="XXX.XXX.XXX.XX"
DNS3="2001.XXX.XXX.XX"
GATEWAY="XXX.XX.XX.X"
HWADDR="XXX.XXX.XXX.XX"
IPADDR="XXX.XXX.XXX.XX"
IPV6ADDR="XXX.XXX.XXX.XX/64" # ここに/64を追加
IPV6INIT="yes"
IPV6_AUTOCONF="no"
IPV6_DEFAULTGW="fe80::1%eth0"
MTU="OOO"
NETMASK="XXX.XXX.XXX.XX"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="OOOOOOOOOO"

上記対応したら、

$ service network restart

で確認

$ ifconfig -a # inet6 addrがScope:Globalも出てること確認
$ netstat -rnA inet6 # ::/0で、fe80::1になってること確認
$ ping6 2001:XX:XX:XX:XX:XX:XX:XX(ipv6のアドレス) # 返ってくること確認

あとは、サイトで両方PASSしてることを確認。 あと、

$ wget -6 hogehoge.com
# これで結果返ってくることを確認

開通はこれでOK。

ip6tablesの設定

iptablesipv4の方なので、別途ip6tablesを対応しないといけない。

$ chkconfig ip6tables --list # 3:onになってたら自動起動設定されてる
$ vim /etc/sysconfig/ip6tables
# httpとhttpsだけあけとく
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

$ /etc/init.d/ip6tables restart

OK

参考:
- https://serversmanvps.xn–ockc3f5a.com/2016/01/04/%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEipv6%E5%8C%96%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F
(↑リンク飛ばねぇ…URLコピペしたら見れる…)
- 俺の知っているコマンドがIPv6で使えないわけがない|サイバーエージェント 公式エンジニアブログ
- 4ステップでWebサーバをIPv6に対応させる方法(2/3) − @IT
- CentOS に ip6tables の設定を行う(IPv6) | Webセキュリティの小部屋

iosストア審査申請のメモ

ios

毎度面倒なのでメモしておく。

以上