tekitoumemo’s diary

技術系だったり車だったり学んだことを書いてく

個人で作ったサービスを五年間運用してきたので語る

f:id:tekitoumemo:20170910172142j:plain
ITunEsTooL - あなたのiTunesを快適に

五年前の入社一年目の頃にフリーソフトを作って未だに運用してるので、そろそろ振り返ろうと思いで記事を書きました。月間600弱ダウンロードの低空飛行サービスで技術もめっちゃレガシーなので、あまり偉そうなこと言えません。

【祝リリース】(一年目)

iTunesの曲が15000曲を超えていよいよ管理しきれなくなった。良いサービスもないし、勉強がてら作っちゃおうって思ったのが始まり。初めは、画像がない曲をcsvに落とすとかそこらへん機能しかありませんでした。とりあえず誰も使わないんだからサイトに上げようと思ってvectorに上げた。一ヶ月のダウンロード数が10程度(笑)。その時ダウンロードした人はマジで申し訳ない。その後3ヶ月間ぐらい放置してました。

何故か雑誌の掲載依頼が2件も来る

IPとMrPC。ITuEsTooLの完成度があまりにも酷すぎたので一件はお断り。二件目はこちら。

なんで一位(笑)。ここでモチベーションが上がる。

Google検索して画像の自動登録が出来た!

これをリリースするまでダウンロード数が10程度だった。この程のサービスはいろいろあるんだけど有無を言わさずに勝手にダウンロードして画像設定しちゃうソフトは今にも後にもこのITuEsTooLだけだと思う。

ダウンロード数がほんのちょっと伸びる(二年目)

10から50ダウンロードまで。公式サイト作ったら伸びるかもしれない!と思い勢いでページ作成。html、cssの知識が全く無かったけどとりあえず公開したいって気持ちで一日で仕上げた。サイズによってレイアウトがぐちゃぐちゃだが、とりあえず形になった。

いろいろ掲載してもらってダウンロード数がほんのちょっと伸びる

50ダウンロードから70ぐらい(笑)エラー通知とかバージョン通知とかいろいろ改善していった。その結果、月100ダウンロードは安定してされるようになった。

レガシー技術に飽きて放置(三年目)

もうね、やることないしwebサービスにハマってたから
完全放置。エラーとかだけ対応してた。

エラーメールがすごい来る(四年目)

いきなりすごい勢いでエラーメールが来る。あまりにも多いので真剣に調べる。
‥‥
Google画像検索APIの終了
これを機に全てを放置することに決めた。ドメインも満期を終え、サイト閉鎖へ。二年間の放置へ。

やっぱり、思い入れがあったので画像検索APIを探す

ほとんどのAPIがリクエスト制限あって未来が見えない。
画像検索APIまとめ
ITuEsTooLのソースコードとか酷すぎて修正したくない領域まで来たのでそこまで手を掛けたくないと思って実装しなかった。今思えば、失敗とわかってても実装しとけば勉強にもなってよかったと思う。

光が見えた(六年目)

iTunesAPIというものがジャケットを検索出来ると知る。リクエスト制限もないし、欲しい画像が手に入るので勢いで開発開始。約五時間ぐらい掛けて修正し、死んでたホームページも無料ドメインで復活。

今のところ、安定して稼働中

今のところ、問題なく稼働していて終了しなさそう。ただ、iTunesLibという10年以上の前のライブラリの一部機能が死んだり、明らかに衰退してるのであと数年の命かなと思ってる。iTunes COMとか10年ぐらい更新してないしね。

振り返って

全く自信の持てるサービスじゃなかったけど、五年間も運用してこれたのは非常に良かったと思う。このサービスを通じていろんな人と出会えたし、なんといっても自分の作品として世に出せることが一番の喜びです。いろんな批判メールも貰いました(笑)次は、世に出しても恥ずかしくないサービスを作って収入を得るまで行ければ僕としても本望です。

次は

とあるところで出会ったエンジニアと共同作業してwebサービスを立ち上げる予定。僕はフロントエンドを担当してデザインを作り、相方はサーバーサイドを作りと。僕なんかと違い、エンジニアと考え方とかいろいろ見習うことがありそうなので楽しみだ。

車の保険がよくわからねぇ!って人にわかりやすく説明していく

あまり詳しくないけど、補償内容を見ていくと本当によう分からん項目が多い。なので猿でもわかりやすく体験談を交えて説明していく。保険会社によっては言い方が違うけど、ちょっと違うだけなので割とわかると思う。

対物賠償

対人賠償保険

事故って人轢いたら相手が怪我する。その怪我の費用を保険会社が負担してくれる項目。ここは「無制限」が良いよ。

対物賠償保険

事故って車やガードレールやらぶつけたら、その車やガードレールを保険会社が負担してくれる項目。ここも「無制限」にすべきだね。

対物超過特約

修理費用が相手の車の価格(時価額)より高くなった場合に保険会社が負担してくれる項目。保険会社の査定額は買取額らしいので絶対「無制限」にしましょう。こういうところが騙されるところよ。

人身傷害

人身傷害保険

自分が事故って怪我したときに保険会社が補償してくれる項目。ここも「無制限」にしましょう。

人身傷害特約

搭乗者が怪我したときに保険会社が負担してくれる項目。一人で乗るだけなら「なし」でも良いけど、一人で乗るだけって車買う意味無くね?って思うので基本「あり」がいいと思う。

無保証車傷害特約

保険かけてねぇ車と事故ったり、逃げられた場合に保険会社が負担してくれる項目。保険は任意なので意外に多そう。そんな馬鹿野郎の為に金かけてられないので、必ず付けましょう。僕は「2億円」にしました。

車両保険
※僕は付けてません!

車両保険

車が事故って破損した場合、自分の車を治す為に保険会社が負担してくれる項目。
車の金額が30万以下だったら基本入らないと思ってる。これは僕の意見だけど、こいつを入れると一年間に4万以上は負担しなければいけないのでそこらへんのバランスを考えて決めましょう。

車両保険金額

車が事故って破損した場合、自分の車を治す為に保険会社が負担してくれる項目。こいつをあげると保険料が比例して上がります。ここは真剣に考えて決めましょう。

車両保険は結構わかりやすく書いてあるので省きますね!

弁護士費用等補償特約

事故ってもめた時に弁護士たてて交渉してもらう為の費用を保険会社に負担してもらう項目。際どい事故だったり相手が変な人だった場合が非常に大変なので、これは付けるべきだと思います。

ロードサービス特約

ロードサービス付けるかって項目。付いてれば良いけど、格安保険は無かったりするので以下の記事を参考にー(JAFの回し者ではない)

JAFは入った方が良いと思う5つの理由

jafはええ!ロードサービスでやってほしいことは全部やってくれるので便利やなーと思った。任意保険のロードサービスでも良いけど、jafにはメリットもたくさんあるから紹介したいと思う(回し者ではない)

1. 年間利用回数無制限

これが神器の一つ。基本無制限なので、バッテリー上がりやパンク、鍵の閉じ込めなどドジった場合でもすぐに駆けつけてくれる。ドジっても電話して無料で対応してくれるので気軽に使えるのが素晴らしい。事故以外でも駆けつけてくれるのでめっちゃ気楽。

2. 「人にかける」保険

これが素晴らしいところ。任意保険のロードサービスは基本的には車にかける保険。JAFは人にかける保険なので、自分の車以外でも駆けつけてくれる。しかも年間利用回数無制限なので気にせずガンガン電話してオッケィ。友達がドジったら自分のJAF呼んで直してもらうことも出来るよ!

3. 年会費が安い

人によって高いか安いかは分かれるけど、年会費4,000円は安いのでは?一度ロードサービスを使うと平均12,000円ぐらいかかるので一回で元が取れる。さらに家族会員だと、2,000円で済むのでもっと安くなる。さらに言うと格安の保険(チューリッヒSBI損保等)はそこらへんのロードサービスを無くして安くしてるからプラス2,000〜4,000円で実績がある保険に入るのは普通にオススメ出来る一つの理由。

4, 居場所が一瞬で伝わり一時間程度で駆けつけてくれる

わけのわからない居場所を言って一時間程度で駆けつけてくれれば早いんじゃないかな?山岳地帯とか説明しづらくてもアプリがあるからGPSで説明せずに呼ぶことが出来るよ!


5, 会員優待施設が豊富

めっちゃある。うまく使えば一ヶ月で4,000円の元が取れるぐらいの割引活用出来るよ!これが目的で会員になってる人もいるんじゃないかと思うぐらい。ロードサービスで満足してさらにこれらの優待があるともう無敵かなと思っちゃう。

有名ブロガーだったらこういうのも案件になるんだろ〜な〜。

過去10年以上洋楽を聴き続けた僕が流行った曲をエピソード付きで紹介する

僕の中学生時代である2003年

とにかくブラックミュージックが流行り、エミネムやら50セントやら悪そうな輩が大人気の年。不景気って言うのも影響してか暗い曲がヒットしていた傾向にある。

lose yourself EMINEM


エミネム主演の8マイルの主題歌。今までのHIPHOPに多大な影響を与え社会現象になった。当時の不良はバンダナに帽子被ってたの見かけた人は多いと思う。年間28位。

In Da Club 50cent


エミネムに見出されエミネムのレコード会社から彗星の如く現れた。エミネム推してたらエミネムより売れちゃったって言うね。とにかくかっこいい、これよりかっこいいHIPHOPがもう出ないんじゃないかと。年間一位。

HEY YA! outcast


この時代にこの曲出すか?って思った。ヒップホップアーティストが馬鹿みたいに騒いで歌ってるとてつもない明るい曲。音楽鳴ったからとりあえずノリで歌ってます的な歌詞や歌声が良い。黒人歌手の音楽に関する天才さと音楽の真髄を教えてくれます。当時、ヒップホップアーティストでこの曲出すのビビってたみたい笑
http://playatuner.com/2017/06/3stacks-afraid/

Get Buzy Sean Paul


レゲエのこんなにかっこよかったんだって当時思った人も多いのでは?ショーンポールはこの後、レゲエアーティストのトップに君臨するんだけど、ブラックミュージック風のレゲエを歌ったアーティストは後にも先にもショーンポールだけだと思います。

Where Is The Love The Black Eyed Peas


平和で素敵な曲。戦争に対して訴えた曲。歌詞も素敵だし曲もいい。HIPHOP嫌いだけどこの曲はすごい好きって言う人は多かったなぁ。

Crazy In Love beyonce


こんなに番組に使われる洋楽は未だかつてないかも。もともと超絶売れていたビヨンセがスーパースターになった曲。

あと10曲以上紹介したい曲がある。2003年は当たり年です。

chatwork api危なくね?

技術ネタ。

※セキュリティの知識がほとんどないけど偉そうに書くよ!

chatworks api
http://developer.chatwork.com/ja/authenticate.html
いろいろいじってみた。簡単。

危なくね?①

まず、ここでtoken取得

HTTPリクエストヘッダに X-ChatWorkTokenと言うキーをセットして取得したtokenをvalueへ。

認証完了。

これブルートフォースアタックくらったらどうなんの?
記憶上だとtokenが結構短かった気がする。まぁ対策してんだろうけど。

危なくね②

roomidが連番(だった気がする)
適当な数字で大体該当。っかこれkeyじゃね?
http://developer.chatwork.com/ja/endpoint_rooms.html

危なくね③

重要
APIトークンは有効期限がなく、機能にフルアクセスが可能なものになっています。第三者へ開示しないよう取り扱いには十分ご注意ください。また、APIトークンはURLのクエリストリングではなく必ずHTTPリクエストヘッダで送信するようにしてください。

アカン

危なくね?④

ユーザー数が多い。
ここにも書いてあるけど10万社導入(すげぇ)。100〜500万ユーザーぐらいいそう。
http://blog-ja.chatwork.com/2016/06/cwblog_16.html?m=1
多ければその分のtoken、roomidとか発行されてるから大丈夫なんか?

ドキュメントの拡張子がhtml

mvc使ってない?ベタがき?

感想

slackで良くね?

1円も掛けずにたった4時間でWEBサービスを作ってみた

タイトルの通り「1円も掛けずにたった4時間でWEBサービスを作ってみた」です。

作ったWEBサービスはこれです。

f:id:tekitoumemo:20170910154905p:plain
picpic - アルバムを検索してアルバムアートワークを見つけよう!

picpicとは?

ちょっと探しずらいCDのジャケットを視覚的に検索してダウンロードできるサービスです。
Google画像検索などジャケットを探せるサービスはあるのですが、画像を選ぶ手間があります。その選ぶ手間を削減するためにもパッと見で選べる良さが「picpic」にはあります。

なぜ作ったか

  • 自分のポートフォリオが少ない。。
  • デザインがいかしてるサイトを作りたい。
  • お金ないけどなにか作って公開したい。

などなどいろいろありますが、自分の作品を世の中に出したいと言う自己満的な要素が一番強いのかもしれません。

本当に4時間で出来たの?

本当に出来ました。開発からサーバー作ってアナリティクスの設定まで4時間で出来ました。「WEBサービスを作ってみた」系の記事は多いですが、それらのサービスに比べ「picpic」は限りなく手抜きをして作っているのでここまでのスピードで出すことが出来ました。※頭の中で考えている時間は省きます。

僕の技量

27歳 男
社会人5年目のエンジニア

  • C# 5年
  • JS,Jquery 3年
  • Angular 1年
  • html 2年
  • その他 VB.NET、VB6、Ruby(かじった程度)、Cobol(笑)

いろいろやってますが、サーバサイドエンジニアが本職です。

利用した技術やリソース

Bootstrap
JQuery
xdomain
LOGO MAKER

制作のタイムスケジュール

9/9 23:30 bootstrap選定
9/9 23:50~25:00 開発
9/10 11:00~12:00 開発(微修正)、
9/10 12:15~12:30 ロゴデザイン、ロゴ制作
9/10 13:00~14:00 サーバ構築、デプロイ、アナリティクス、googleインデックス送信

良かったこ

名前、デザインなどのこだわりどころに時間をかけない
デザインはBootStrapを使い、ほんの少しいじったぐらい。こだわりどころの名前とデザインは嫁と一緒に考えて即決めた。
動いた時点でデプロイ
ローティングとかサイズを選んでダウンロードとかさせたかったけど、後回し。とりあえず、使える段階まで持って来ればOKという気持ちでやった。
1円もかかってない
xdomainはマジ優秀。htmlサーバーなら1Tまで無料でJSは動くから簡単なサービスは無料で作れる。しかも、登録したらすぐに使えるので非常に便利ですね。※xdomainのまわしものじゃないよ!
サイトが閉鎖する心配がほぼない
たぶん無料レンタルサーバーはやめないと思うんだ。いきなりやめますはxdomain的にも結構なリスクだし。「WEBサービス作ってみた」系はレンタルサーバの解約で閉鎖してることが多いからそこは安心かな?代替えは必ずあるから復活出来るし!

悪かったこ

詰まったところは後回し
デプロイしたらアクセス権かなんかでSNSロゴが404になったけど放置して違う対処した。原因はわからないけど解決できそうな気がするから調べたほうが良かったかも

誰でも4時間で出来るの?

僕はJquery、htmlの知識がある程度あったのですべてを4時間で出来ましたが、知識ない人だと1週間ぐらい見ておいたほうが良いかもしれません。ただ、僕もスキル的には普通だと思っているので、臆することなく「作りたい!」って気持ちがあったら作ってほしいと思います。

WEBサービスを作りたいと思ってる人へ

WEBサービスを作ってみた」系の記事を見ると超人的な感じがしてモチベーションが下がる人が多いと思いますが、htmlだけでもWEBサービスは作れます(しかも無料で。僕もサーバーサイドを含めたサービスを作りたいという気持ちはめちゃくちゃありますが、やることが多すぎでいつの間にかモチベーションが下がることが多いです。まずは簡単に出来るものを作ってみてサイトの運用をやってみることが大事だと思います(アナリティクスやサイトの宣伝など)。結局は外部からの刺激で自分のモチベーションは上がるので、そこからサイトの改善など、出来ることを増やしていくのが一番サービスを立ち上げやすい流れだと思います。あれ出来ない、これできないでなにもしないのは良くないので、出来ることから世の中に発信していきましょう(サービス立ち上げても宣伝しない限り人はまったく来ないから恥ずかしがらずに!)

最後に

今まで作ったサービスはこれらです。github載せてますが、コードを見るとクソ過ぎて驚愕します(今の自分も驚愕してる)。
こんなんでも作れるんだぞ!ってのを知ってもらいたいので、臆せずにどんどん作っていきましょう!

f:id:tekitoumemo:20170910172142j:plain
ITunEsTooL - あなたのiTunesを快適に
f:id:tekitoumemo:20170910154905p:plain
picpic - アルバムを検索してアルバムアートワークを見つけよう!

githubのURLを見たい方は「exkurumizawa@gmail.com」までお問合せ下さい(ここには載せません

会社サボってITunesAPiをいじった話

技術ネタ。


会社サボって(38℃あって体怠い)久しぶりにプログラムしたよ!
5年前に作った「ITunEsTool」ってのがあってGoogle Image Search APIがサービス終了になったんでずっと放置してた。






ITunEsTooL - あなたのiTunesを快適に

tekitoumemo.hatenablog.com
tekitoumemo.hatenablog.com

画像取得系のAPIはほとんど規制かかって実装してもすぐボツりそうだなぁと思って一生放置しようと思ったらITunesAPiというものがあったので実装してみた。

リクエスト(詳しくはココ

https://itunes.apple.com/search?lang=ja_jp&entry=music&media=music&country=JP&term={検索キーワード}&limit=100

コード

    // serchWordは検索キーワード
    // NugetにてRestSharpってのを使ってる
    var client = new RestClient(string.Format("https://itunes.apple.com/search?lang=ja_jp&entry=music&media=music&country=JP&term={0}", serchWord));
    var request = new RestRequest(Method.GET);
    request.AddHeader("cache-control", "no-cache");
    IRestResponse response = client.Execute(request);

レスポンスに「artworkUrl」ってのがあるんだけど100×100の画像で小さすぎるので以下で対処。

リクエス

https://itunes.apple.com/search?lang=ja_jp&entry=music&media=music&country=JP&term=purpose&limit=1

レスポンス

{
    "resultCount": 1, 
    "results": [
        {
            "artistId": 320569549, 
            "artistName": "ジャスティン・ビーバー", 
            "artistViewUrl": "https://itunes.apple.com/jp/artist/%E3%82%B8%E3%83%A3%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3-%E3%83%93%E3%83%BC%E3%83%90%E3%83%BC/id320569549?uo=4", 
            "artworkUrl100": "http://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/100x100bb.jpg", 
            "artworkUrl30": "http://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/30x30bb.jpg", 
            "artworkUrl60": "http://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/60x60bb.jpg", 
            "collectionCensoredName": "Purpose", 
            "collectionExplicitness": "notExplicit", 
            "collectionId": 1049381490, 
            "collectionName": "Purpose", 
            "collectionPrice": 1200.0, 
            "collectionViewUrl": "https://itunes.apple.com/jp/album/purpose/id1049381490?i=1049382087&uo=4", 
            "country": "JPN", 
            "currency": "JPY", 
            "discCount": 1, 
            "discNumber": 1, 
            "isStreamable": true, 
            "kind": "song", 
            "previewUrl": "https://audio-ssl.itunes.apple.com/apple-assets-us-std-000001/AudioPreview122/v4/75/86/68/75866889-34af-0608-33f0-7b66c1975d79/mzaf_790555538368794394.plus.aac.p.m4a", 
            "primaryGenreName": "ポップ", 
            "releaseDate": "2015-11-13T08:00:00Z", 
            "trackCensoredName": "Purpose", 
            "trackCount": 21, 
            "trackExplicitness": "notExplicit", 
            "trackId": 1049382087, 
            "trackName": "Purpose", 
            "trackNumber": 13, 
            "trackPrice": 250.0, 
            "trackTimeMillis": 210151, 
            "trackViewUrl": "https://itunes.apple.com/jp/album/purpose/id1049381490?i=1049382087&uo=4", 
            "wrapperType": "track"
        }
    ]
}
http://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/100x100bb.jpghttp://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/500x500bb.jpg

取得できる画像はこんな感じ(「Purpose」は神)
http://is3.mzstatic.com/image/thumb/Music6/v4/ff/27/0e/ff270e68-6d4a-d0f9-29be-df64038f4255/source/1000x1000bb.jpg


あんま調べてないけど1500×1500までなら取得できそう。

そんなこんなでサイト復活。サイトの掲載依頼と昔載せてくれた雑誌に営業メールして終了(意外に返信率が高くてびっくり)。実績的なの送ったら以外にいい感じだったわ。

■ダウンロード数
5000ダウンロード
■掲載サイト:
Vector
窓の杜
フリーソフト100
・オールフリーソフト
フリーソフトナヴィ
■掲載雑誌
・Mr.PC
・iP!(アイピー)

こんなんやってっから風邪が治らんのだな。。
まぁ、ソースコードとかクソ過ぎて見てもいられなかったけど久しぶりにやるのはいいと思いました。