タグ

ブックマーク / www.bokukoko.info (61)

  • 複数の SaaS を開発すべきでない理由 - ボクココ

    ども、@kimihom です。 開発した一つの SaaS が多くのユーザーに使われるようになった時、別のサービスを作り始めるケースがよくある。これらは失敗するので、自らの経験と共に記しておこう。 Atlassian や Basecamp(37 signals) プロダクトを全て使うのか 当時、Atlassian の製品を好んで利用していた時期があった。Atlassian 製品を全て使い切ることが、最適な選択だと思っていた。私が使ったことあるのは、以下のプロダクトである。 Jira Confluence Trello Bitbucket Sourcetree Statuspage 現在はさらにプロダクトが増えて、数えただけで16個ある模様である。これらシステム開発に必要になるであろうあらゆる機能を実現したサービスを、Atlassian アカウントで連携させて開発効率をあげる。そんなことができ

    複数の SaaS を開発すべきでない理由 - ボクココ
  • YouTube 動画再生数500を記念して - ボクココ

    ども、@kimihom です。 趣味で投稿を続けてきた 「指揮ピアノ」 動画が、累計で500を超えたので記念に記事として記しておこう。 指揮ピアニスト なるとりさ - YouTube 続けよう、続けよう、続けよう 続けよう。これに尽きる。どんなに再生数が少なくても、コツコツと続けられた人が最終的に残るのである。 純粋な想い。「自分たちの撮った動画を(一部の人たちでもいいから)見てほしい」という想いさえあれば、再生数が増えなくても、純粋に 楽しむ ことができる。 最初から再生数1万とか目指したり、収益を得るといった目標にしてしまうと、ほぼ脱落する。すぐにそんなことにはならないのだ。純粋に続けられるっていう想いこそ大事なのである。 身近だけに見てもらう 身近だけに動画を伝えると、それだけで話題となる。 あの指揮適当すぎるだろ(笑) 情熱のこもってる動画だ! よくまぁ続いてるね 次は何やるの?い

    YouTube 動画再生数500を記念して - ボクココ
  • Heroku での npm バージョンの違いによるデプロイ失敗メモ - ボクココ

    ども、@kimihom です。 急に Heroku での Node.js アプリのデプロイが失敗したので、その原因と(一次)対応について記しておく。 問題 いつも通り、git push heroku master でデプロイしたところ、以下のようなエラーが発生するようになった。 remote: -----> Installing binaries remote: engines.node (package.json): 15.x remote: engines.npm (package.json): unspecified (use default) remote: remote: Resolving node version 15.x... remote: Downloading and installing node 15.14.0... remote: Using default n

    Heroku での npm バージョンの違いによるデプロイ失敗メモ - ボクココ
  • SwiftUI で print が動作しない理由 - ボクココ

    ども、@kimihom です。 SwiftUI で開発してて、最も大きな謎であった print の出力が動かない理由がようやく分かったのでまとめておく。 SwiftUI の基記法 単にテキスト表示させる SwiftUI は import SwiftUI struct ContentView: View { var body: some View { Text("Hello World") } } となる。さて、ここで変数を持って print で検証したいってケースは当然のように出てくるだろう。 import SwiftUI struct ContentView: View { var date = "2021/2/23" var body: some View { print(date) Text("Hello World \(date)") } } これだけで、 body の { の部

    SwiftUI で print が動作しない理由 - ボクココ
  • iOS / Swift 開発のハードル - ボクココ

    ども、@kimihom です。 Swift での iOS アプリ開発で苦戦している最中だ。少しずつ進んでいるけど、そこで起きている現在のハードルについて記してみよう。 バージョンアップが激しい まず、2年前以上の Swift 関連記事をググって見つけても、ほとんどは役に立たない。現在では UISwiftUI で作ることが一般となりつつある中、1~2年前まで主流だったオートレイアウトでの記事しかないためである。 オートレイアウトの状態のままでも動かし続けられるため、前からオートレイアウトを使っていた方がわざわざ SwiftUI に書き換えるってのも無いようで、新しい記事でも SwiftUI を使われていない記事もいくつかある。 SwiftUI での最新記事のほとんどは、初心者向けの単純なものか、逆に記事が複雑すぎて理解困難なものが多かった。もちろん私の理解力不足ってのもあるだろうけど、

    iOS / Swift 開発のハードル - ボクココ
  • SQLの負荷分析と改善 - ボクココ

    ども、@kimihom です。 今回 SQL の負荷を分析して改善することをしたので、その実施を残しておこう。 パフォーマンス解析 基礎 何かしらサービスをローンチする時点で、パフォーマンス解析するようなサービスを導入することかと思う。 New Relic | パフォーマンス分析プラットフォーム Application Monitoring for Ruby, PHP, Node.js, Python, and Elixir ~ Scout Application Monitoring for Ruby on Rails, Elixir & Node.js | AppSignal APM 実際にその "SQL をどの頻度で使っているのか、平均どのくらい時間がかかっているのか" を定期的にチェックするのが、サービスの運用として必要なことになる。 最初のローンチ時点で SQL の負荷がとてもか

    SQLの負荷分析と改善 - ボクココ
  • Swift の型と省略記法を学ぶ - ボクココ

    ども、@kimihom です。 まだ Swift を学習中の状態だ。Swift で実際に書かれたコードを読むと、「!?なんだこの書き方は」っていう謎の文法のソースコードをよく見る。そこをスルーせず、ちゃんと理解することで、心地よく Swift コードを読むことができよう。 型 型の中でも、特徴的なのが Optional型 だ。値が"ある"か, "nil" かいずれかを表す型である。 実際に存在する場合の Optional型にアクセスするには、事前に検証するコードが必要となる。 検証方法1では if 文で代入して確認する方法。検証方法2では各 opt の書き方で nil の場合には ?? の右の値が使われることになる。検証方法3ではメソッド内の検証で通れば出力させる。 let opt1 = Optional.some(5) let opt2: Int? = nil let opt3 = Op

    Swift の型と省略記法を学ぶ - ボクココ
    masayoshinym
    masayoshinym 2021/01/25
    自分もこの本で学んだ。良書。
  • 手術と現場の報告 - ボクココ

    ども、@kimihom です。 退院とはいかないが、手術が終わって体調が落ち着いてきたため、記事として現場の報告をしておく。 まずは何より、生きていられた。私の発症した脳腫瘍の手術は、頭を切り開く手術であり怖いものであった。しかし、手術をしていただくお医者さんは手術前に何度もお話できて信頼できる方々であった。だから不安よりかは、もっと体調が良くなる未来を考えることができた。 手術室はドラマで見るような場所で、私一人の手術のために、10名ほどがその手術部屋に集結し、それぞれの役割を担っていた。一度手術が始まれば、私自身はすぐに眠くなるようガスのようなものを吸い、すぐに眠ってしまった。手術は12時間を超えるものとなったようで、私が目覚めるといつの間にか翌日になっていた。 手術自体は最初の方の記憶しか残っていないものとなった。そして辛いのはそれ以降だった。頭がグッと来る辛みが出始めるようになった

    手術と現場の報告 - ボクココ
  • 病気の試練を乗り越えた先を信じる - ボクココ

    ども、@kimihom です。 私は今、シルバーウィークで休みというのに、病院で入院している。今までの経緯と現状、そして今後のことについて記してみよう。 きっかけ 先日(シルバーウィーク前)、生まれて初めて人間ドッグを受けた。そこで健康に問題がないか、徹底的に調べてもらった。人間ドッグの前は何もべちゃいけないので、その日は夜まで一切何もべない生活となった。 症状が発生したのは、その人間ドッグが終わった日の夜だった。朝から何も事をとっておらず、ようやく夜に初めてのご飯をべようとした瞬間である。私は急に意識を失ってしまった。事前に気持ち悪いだとか、痛いだとか、そういった症状が一切なく、いきなり倒れる形となった。救急車に乗って運ばれた記憶すらなく、気がついたらいつの間にか病院のベッドで寝ていた。おでこの付近に倒れたときにできたアザができていた。 倒れた原因と対応 人間ドッグを受けた直後な

    病気の試練を乗り越えた先を信じる - ボクココ
  • Heroku Postgres のアクセスが遅くなった時にした対応 - ボクココ

    ども、@kimihom です。 先日、Heroku Postgres の Hobby プランを使っていたら、急に DB へのアクセスが遅くなった事象が発生した。その原因と対応について記しておく。 問題の原因 まず、どんなときに遅くなったのかというと、1つのレコードに大量のデータが入ったときだった。それ以降、Heroku Addnons の NewRelic や Scout APM などのアドオンで重たい原因となっている部分を調べたところ、Active Record(DBアクセス) で 90% 以上の時間を費やしていることがわかった。 Postgres のレコードのカラムを text 型で保存し、そのカラムに大量の文字をテストで入れて保存してから、急にデータアクセスが遅くなってしまったのだった。そのデータは、ページロード時に読み込まれるデータであり、とりわけ Heroku Dyno を再起動

    Heroku Postgres のアクセスが遅くなった時にした対応 - ボクココ
  • ビデオ通話における Web サービス毎の通話品質に関して - ボクココ

    ども、@kimihom です。 最近、またガッツリ WebRTC に関しての調査と実装をしている。近頃ではビデオ通話の背景画像を面白おかしくすることが注目されがちだけど、ビデオ通話サービスを提供する側で最も大切なことは、引き続き「ビデオ通話の品質」であることは間違いない。 ビデオ通話の品質の良いサービスと、そうでないサービスの違いがなぜ起こってくるのか、簡単に説明してみる。 一番手軽な 少人数通話 P2P WebRTC で最も簡単に ビデオ通話を実現させる方法として、P2P による パソコンとパソコンをインターネット経由で直接つなげる方法がある。この方法は、最も手軽にビデオ通話の機能を実現できるし、サーバーの負担がほとんどかからない魅力がある。だから WebRTC 初心者のほとんどは、この P2P によるビデオ通話を実現している。 しかし、この P2P 接続によるビデオ通話のクオリティは、

    ビデオ通話における Web サービス毎の通話品質に関して - ボクココ
  • SaaS におけるカスタムダッシュボードの実装 - ボクココ

    ども、@kimihom です。 SaaS を開発していると、指標管理をしたいニーズが多く出てくるかと思う。そんな中で、どんな指標を掲示するかって部分は、企業の文化や目標によって違うため、企業ごとに最適な指標を掲示できるようにしたいという流れになることが多くあるだろう。 今回はその課題を解決するためのカスタムレポート(ダッシュボード)機能に関して技術的な部分にフォーカスを充てて解説してみる。 CallConnect カスタムレポート(ダッシュボード) デモ 表示形態の保存 まず、好きなように項目を表示できるように、設定データを設計しよう。全てのレポートで共通の項目と、レポートごとに違う項目を分けて考える必要がある、ここでは以下のようなデータ構造サンプルを挙げておく。 order (順番) width (横幅) height (高さ) title (タイトル) period (集計期間) ex

    SaaS におけるカスタムダッシュボードの実装 - ボクココ
  • Cache API を利用したフロントエンドキャッシュ - ボクココ

    ども、@kimihom です。 今回は Cache API を使う機会があったので、調査結果と利用のユースケースと共に紹介しよう。サーバーサイドをどんなに高速化するよりも、フロントエンドで そもそもリクエストをさせない 仕組みにすれば、それが最も速いというのを改めて感じた。 Service Worker と Cache API 「Service Worker を使えば、オフラインでもアクセスできるようになる」っていうのがよく聞く話だろう。これを実現するには、Cache API と Service Worker の2つを組み合わせることで実現できる。Service Worker を使うと、ページリクエスト時のイベントを横取りすることができるから、それが実現できる。詳しくは以下の Qiita が参考になる。 ServiceWorkerとCache APIを使ってオフラインでも動くWebアプリを

    Cache API を利用したフロントエンドキャッシュ - ボクココ
  • Web ビデオ通話で起きた問題の特定と解決方法 - ボクココ

    ども、@kimihom です。 最近は Web 上で簡単にビデオ通話ができるサービスが増えてきている。そんな中でよく起こるのが、うまく聞こえなかったり途切れたりして会話が成り立たないという問題だ。そんな問題が起きた時の原因の特定方法について記す。 イヤホン使ってる? まず最初に原因として考えられるのが、パソコンに接続したマイクの問題だ。AirPods の内蔵マイクなどは、かなりの確率でビデオ通話の音質に影響を与える。相手が聞こえないとかになってしまう確率がとても高い。そのビデオ通話が当にたまにしかないのであれば、相手に我慢してもらうしかない。 ビデオ通話で会話に支障をきたしたくないのであれば、ヘッドセットを利用しよう。ヘッドセットも最近はワイヤレスの機器が増えているが、音質が大事になるケースでは有線のヘッドセットの方が確実に安定する。 ゼンハイザー SC 30 USB CTRL エントリ

    Web ビデオ通話で起きた問題の特定と解決方法 - ボクココ
  • Rails x jQuery でコードをカオス化させないコツ - ボクココ

    ども、@kimihom です。 今でも jQuery で動いている Web アプリケーションは多いことかと思う。jQuery は特性上、ソースコードがカオスになりやすいので、複数人で Web アプリケーションを開発するとすぐにメンテしたくない程のシステムができあがってしまう。そこで別の JavaScript フレームワークへ一気に移行するってのが最近のトレンドではあるが、もっとシンプルに jQuery のリファクタリングによって改善する上での Tips をお届けする。 コントローラー毎に厳密に分ける Rails でコントローラを作成する際のお決まりコマンド rails generate controller によって、JavaScriptCSS もコントローラ毎に生成される。このルールをしっかりと守ろう。 View <div id="user-controller"> </div>

    Rails x jQuery でコードをカオス化させないコツ - ボクココ
    masayoshinym
    masayoshinym 2019/02/12
    “Ajax で何かリクエストを呼んだとしてもレスポンスは html.erb にすることだ。”
  • シングルページアプリケーションである必要性を考えよう - ボクココ

    ども、@kimihom です。 2019年、皆さんはどんな技術を習得したいと考えているだろうか。その中の候補の一つとして、おそらく「シングルページアプリケーション(以降SPA) を流行りの JavaScript フレームワークで作れるようになる」という目標を掲げている方も少なくないだろう。 私自身 SPA でサービスを作った経験を踏まえて、その価値に関して改めて考え直してみて欲しいと思いこのエントリーを記す。 ユーザーは SPA 自体を求めていない 技術トレンドに流されまくるエンジニアが後を絶たない。 SPA が流行ってるからうちもチャレンジしてみよう あの有名企業が Go を採用したからうちも Go 使ってみよう REST の時代は終わりらしいからうちも考え直そう これらに関して考えるべきことは、「その技術を採用した企業と、あなたの置かれた状況は一致しているのか?」という点だ。実際は全く

    シングルページアプリケーションである必要性を考えよう - ボクココ
    masayoshinym
    masayoshinym 2019/01/07
    “もしその状態で他のフレームワークに移っても、そのフレームワークを使ったカオスなコードができあがるだけである。”ほんこれ。
  • UI が複雑なほど自前で実装すべき理由 - ボクココ

    ども、@kimihom です。 先日、私の運営するサービスでカレンダーUIの機能をリリースした。開発ストーリー的な話は以下の記事でオフィシャルに記載している。 営業時間設定の改善に込めた想い | selfree 今回のリリースは視覚的に説明しやすいので、記事で技術寄りの内容を記すとする。 カレンダーUI の概要 まず今回の実装した概要を動画としてキャプチャしたのでご覧いただきたい。 www.youtube.com この機能の特徴として、以下のような点が挙げられる。 1日だけでなく複数日にまたがって斜めスクロールができる 削除は1日ごと 収縮が可能 1日で複数の期間を登録 一括で上書き可能 期間を各エリアの最上部に表示 このようなドラッグ&ドロップして期間を選択するUI を実現したいとき、あなたならどういう方針で開発を進めていくだろうか。 こだわりがあるほど自前実装 ほとんどの場合、まずは

    UI が複雑なほど自前で実装すべき理由 - ボクココ
  • Web サービスにおける SSL の選定 - ボクココ

    ども、@kimihom です。 先日、自社のサービスを EV SSL へ適用したので、それに至った経緯と SSL について思っていることを記す。 SSL 化の流れ もはや、今時のサービスで SSL(HTTPS) 化していないWebサービスはほとんどなくなった。ましてや企業毎に重要な情報を保存するケースの多い SaaS などでは HTTPS 化は必ずしなくてはならない対応の一つとなっている。個人のページや 会社HP など、 HTTP でも特に指摘されることがなかったようなサイトでも、SSL を利用することが重要になってきている。SSL を適用していないページの検索順位が下がってしまたり、ページ閲覧時に Chrome から警告表示されてしまうためである。 その流れの中で、もはや私たちが HTTPS を使わない理由が存在しない。今では、 Let's Encrypt のような無料の SSL も登場

    Web サービスにおける SSL の選定 - ボクココ
    masayoshinym
    masayoshinym 2018/05/14
    URLの隣の企業情報を気にする人ってそんなにいるかな?
  • Ruby on Rails の魅力と思想 - ボクココ

    ども、@kimihom です。 私は Web フレームワークは Ruby on Rails を利用している。かれこれバージョン2.2 の頃から使い続けているので 7年以上になる。そこまでして私が Ruby on Rails を使い続ける魅力について個人的な想いを記していく。 Rails の作者 DHH と彼の環境 Rails の作者として有名な DHH(David Heinemeier Hansson) という名前は、 Ruby on Rails を触ったことがあるなら必ずや聞いたことがあるだろう。しかし、彼のいる会社 Basecamp がどんな想いでどんなことをしているかを知っている人は案外少ない。 Basecamp はプロジェクト管理の SaaS である。今や世界中に顧客を抱える超有名サービスであり、Basecamp は Ruby on Rails の最新版をプロダクトに反映され続けて

    Ruby on Rails の魅力と思想 - ボクココ
  • Chrome WebRTC でスクリーンシェアする方法まとめ - ボクココ

    ども、@kimihom です。 WebRTC なサービス開発をしていると、デスクトップのスクリーンシェアをしたくなる時がある。その方法について一括でまとめてみる。 2018/8/28 追記 Chrome Inline Install が廃止されるらしい。そのため、以下のインラインインストールは実装できなくなるのでご注意を。 Google Developers Japan: Chrome 拡張機能の透明性向上について スクリーンシェア概要 まずスクリーンシェアをするには、専用の Chrome 拡張 をマーケットに公開し、ユーザーがその Chrome 拡張をダウンロードしてもらう必要がある。その Chrome 拡張 で作成された Track を最終的に WebRTC に乗っける形となる。 Chrome 拡張のインストールを手軽にしてくれる、Chrome Extension inline ins

    Chrome WebRTC でスクリーンシェアする方法まとめ - ボクココ