音声操作可能なiOS(iPhone iPad)ブラウザアプリを作りました
iPhone、iPad向けに音声で操作可能なブラウザアプリを作りました。
できること
基本的に普通にブラウジングする分にはすべて音声操作で完結するようにしてあります。 具体的には検索、スクロールダウン・アップ、リンクのクリック、戻る・進む、リフレッシュ、などです。 音声で操作が完結する部分に注力していて、タブを複数開いたりブックマークを登録するといった、ブラウザとして当たり前のように求められる機能は全然実装していません。 ただ、このアプリはITリテラシーがあまり高くないようなユーザーをターゲットにしているため、そういった機能があったとしてもあまり使われないんじゃないかと思います。
デモンストレーション
作った背景
少し前にGoogle HomeやAmazon Alexaなどスマートスピーカーがブームになり、音声でデバイスを操作するということが当たり前になってきているような印象があります。 個人的には何かに対して話しかけることで操作するというインターフェースはあまりピンとこないというか、声を出すのよりは指先を動かしたほうが楽に感じてしまうのですが、例えば私の母親なんかは何かを検索するときには必ず音声で入力しているので、音声操作は可能性があるのかなと考えてちょっと作ってみました。
想定ターゲットと用途
- 体が不自由な方
デバイスを指で操作するのが難しい方が利用する - スマホの操作が苦手な方
画面をタッチするのが意外と難しかったり、ブラウザバックの横スワイプが苦手だったりする方が該当する操作を声で実施する - 手がふさがっているタイミング
料理中だったり、庭仕事をしている時など、テでスマホを触れない状況で利用する
反省点
アプリを何人かに利用してもらって感じた反省点です
- 画面上部に音声入力された文字列を表示するウィンドウがあるが、これがsafariのURL入力ウィンドウと似ているため、タッチしようとしてしまう
- 音声操作が直感的じゃない。操作方法を説明しないと全然使えない
- 音声操作で何ができるかわからない、操作のためのキーワード(「検索」としゃべると検索画面に移動するなど)がわからない
- 「これ音声で操作できるんです」といって渡すといきなり検索用の文言を話始めるが、その操作はできない
- アプリは5秒単位で操作用の音声を聞き直している。この聞き直しが発生する前のタイミングから操作用の音声を話しても、その前の音声と混ざってしまいうまく操作できない。これはストレス
- 親世代は音声入力は使うよくが、音声操作の必要性はあまり無い様子。入力はあの小さく使い慣れていないキーボードで入力しないといけないため、結構大変。しかし操作は基本的にタッチやスワイプができれば完結するので、それらのイベントを音声で行える必要性はあまり無い
思えば一番始めに携帯を手にしたときは入力だけやたらと大変だった。あの感覚と同じなのだろう - となると、あとは体が不自由な方の利用や手がふさがっているタイミングでどれだけ使えるかになってくるのだが、全然検証できていない
展望
思いつきで作ったので上記のような反省点が出てくるのはしょうがないとは感じつつ、展望を考えてみます。 まず、ターゲットが甘いので今想定しているユーザーごとにもう少し深ぼる必要があると思っています。 例えば本当に音声操作のみで完結できるようにするのであれば、もっと使いやすいユーザー体験にする必要があります。 今アプリが操作を待っている(聞いている)のかどうかはっきり明示したり、常に操作を待っている状態で行くのであればもっと柔軟に命令に対応してあげる必要があります。 もし音声操作は受け付けつつITリテラシーの低いターゲットに注力するのであれば、音声は入力が主だと割り切りそれに注力したUIUXにするのもありだと思います。例えばアプリを開いた瞬間から、検索クエリを聞いているみたいな。
あとこういった個人開発は作るのが楽しくて本当に価値があるのかあまり検証せずに進めますが、本気だすとしたらやはりユーザーを見つけ、対話をしながら進めるべきです。
ダウンロードはこちら
と、完成度が低くQiitaユーザーのようなリテラシーの高い方々には箸にも棒にもかからないとは承知しつつ、一応リンクを載せておきます。よろしくお願いします。
付録:Apple Storeへの提出と審査
今回始めてiOSアプリをリリースしました。Appleへの提出と審査に関して感じたことを書きます。
- 審査は早い。昔は一週間くらいかかっていたと聞きますが、今は2日以内で審査が終了します。
- 審査はちゃんとしている。メタデータ(アプリそのものではなく宣伝用の画像など)に不備があり、一度リジェクトされましたがその理由はしごくうなずけるものでした。それらを修正したら承認されました。
- リリースは思ったほど大変じゃなかった。key chainやprovisioning profile、XcodeからApp Store Connectへのアップロードなど、iOSは審査依頼までかなりステップがあります。ですが大きくハマることもなく、問題があった場合その指摘もわかりにくくはなかったので、アプリができてからは2,3時間で審査依頼までこぎつけました。
エンジニアランキング検索|起業家・フリーランサー向け仲間探しサイト
エンジニアを検索し、ランキング表示できるサイトを作りました。
エンジニアランキング検索|起業家・フリーランサー向け仲間探しサイト
宣伝の意味を込めてどんなサービスなのかを書いていきます。
何ができるのか
このサイトは https://qiita.com/ に登録している10万人を超えるエンジニアを検索できるサービスです。 細かい機能としては、下記があります。
エンジニアの検索・絞り込み
- 言語やフレームワーク、ライブラリ等エンジニアのスキルセットから検索
Qiitaでは記事にタグをつけて投稿することができます。なので、その特定のタグを投稿した経験が多いほどその内容に精通していると考えられます。 - SNS情報が登録されているかどうかで絞り込み
Twitter、Github、Facebook、LinkedInのアカウント情報を公開しているかでフィルタリングできます。 直接コンタクトを取りやすい(声をかけやすい)エンジニアを探せます。 - 居住地情報が登録されているかどうかで絞り込み
- フリーワード検索
ユーザーネーム、氏名、プロフィール文、居住地を横断してフリーワード検索ができます。
例えばフリーランス
と検索して、仕事を依頼できそうなフリーランサーを探すことができます。
検索・絞り込みはこんな画面です。
エンジニアの詳細プロフィール
- Qiitaに登録しているエンジニアの一人ひとりの情報を詳細ページで表示します。
- 今までどんなタグに関して何回記事を投稿してきたかをグラフで表示します。
- 最近の投稿データをテキストマイニングし、キーワードを抽出。タグ以上にどんな分野に強いか・興味があるかを分析しています。
エンジニア詳細ページはこんな画面です。
誰の何を解決するのか
エンジニアを探す、また将来的にはエンジニアが活躍の場を広げるということに利用できるようなサイトにできたらと考えています。
起業家・スタートアップがジョイン・業務を手伝ってくれるエンジニアを見つけられない
起業家・スタートアップがエンジニアを探すという場合、エージェント経由や知り合い経由、SNS経由で探すなどいくつか方法が考えられます。 このうちSNS経由で探すという方法に関して、それぞれのSNSで個別に探すという方法しかありません。 しかしこのサービスを利用すれば、エンジニアが利用している主要なSNSを横断して探すことができ、より効率的になります。
企業が案件を依頼できるフリーランサーを探すのが大変
企業には、人員を増やせないが一部スポットで開発の依頼をしたい。もしくは特定の技術を持った人が必要になったので依頼したいといったタイミングがあります。 そういった場合、これまでは開発要員を企業に提供するようなSIerに依頼することが多かったと思いますが、近年フリーランサーに依頼するということが増えています。 これは個人でも仕事を探せるプラットフォームが増加し、比例してフリーランサーが増えてきたという背景があると考えられます。
そのような際に、企業は通常フリーランスが登録しているようなサイト、クラウドワークスやレバテックなどで案件にマッチするようなエンジニアを探します。 この場合に手数料がかかるのはもちろん、実際にどのようなスキル・知識があるかはなかなか判断するのが難しかったりしますが、これをある程度解決できるかと思います。
エンジニアが仲間を探す
技術が武器であるエンジニアの場合、つねにその技術の知識をアップデート、拡張することが求められます。 なのでエンジニアは社内外問わず知り合い同士だったり、勉強会を企画・開催するようなことが多いです。 こんなときに、より自分と同じような興味範囲のエンジニアを探す、もしくは自分が広げたいと思っている領域に精通している方を探す、そういった用途に利用できると考えています。
Qiitaは優秀なエンジニアが集まるサイト
これは完全に私の所感ですが、Qiitaにはエンジニアの中でも下記のような方が多くいると感じています。
- 技術力が高い
ある程度自分からアウトプットできるような方はやはり技術力が高いです。
- スタートアップ・フリーランス基質の方が多い
自由にアウトプットできるような方、またアウトプットによって評価をあげようと考えている方は所属する組織によらず自分の能力・知識で勝負しようとする方が多いと考えられます。
ということで、総じて思い描いているような利用シーンに合致するエンジニアが高確率で検索できるのではないかと考えています。
サイトの技術的な背景
どんな技術を利用してこのサイトを構築したかに関してです。
Django
Python製のWebフレームワークです。豊富な機能で慣れると作りたいものを最小のコストで実装できるようになります。
VPS
インフラはconoHaのVPSを利用しています。このくらいのサイトだとHerokuを使うことが多いですが、いろいろプラグインを入れたりしているうちに価格がかさむのでもっと安くしかも自由度の高いVPSを利用しています。
Bootstrap4
フロントは見ての通りBootstrap4です。見た目はカスタマイズされたCSSファイルで少しBootstrapぽさをなくしていますが、HTML内で指定しているClass自体はすべてデフォルトで提供されているものを利用しています。
その他ライブラリ
キーワード抽出
キーワード抽出は、最近の記事を全て品詞分解し、名詞のみ抽出。 そしてその名詞を出現頻度などから重み付けしています。 前者はMeCabという形態素解析ライブラリを、後者はTermExtractというライブラリを利用しています。
ワードクラウド
抽出したキーワードはワードクラウド(単語を雲みたいにずらっと羅列・重要なものは大きな文字になる)としてフロントに表示しています。 これにはjQCloudというjQuery製のライブラリを利用しています。
Qiita API
情報の取得にはQiitaのAPIを利用しています。やや制限がありいくつか工夫したことがあります。
ユーザーを全て取得することが難しい
ユーザー(エンジニア)取得用のAPIエンドポイントは、100件づつの100ページまで、つまり10,000件が限界です。しかしQiitaに登録しているエンジニアのは10万人以上いるのでこれでは足りません。 ユーザーネームで一人ひとりプロフィール情報を取得するAPIはあるので、それを利用するにしても、全てのユーザーのユーザーネームが必要です。 最初にAPIではなく、Qiitaのページをスクレイピングし、ユーザーネームだけ全て取得しようかとしましたが、あまりスマートではないので途中で方針を変更しました。
記事の検索は可能
記事を取得するAPIはユーザー同様100件づつの100ページという制限があります。しかし、このAPIは検索用のクエリが利用可能です。 なので、頑張れば全ての記事を取得してそこから作者、つまりユーザー情報を取得することが可能です。 この場合記事を書いたことのないユーザーの情報は一切取得できなくなりますが、それでは結局そのエンジニアがどのような方なのかを判断できないので、そういった方は対象外とすることにしました。
記事を全て取得する
記事取得APIの検索クエリには、期間を利用可能です。なので、100件づつの100ページである10,000件を超えない期間で限界まで記事を取得→そして期間を変更して再度記事を取得、という方針で行くことにしました。もう少し具体的には、
- 今日の日付から過去15日の投稿を全て取得
- 100回のコールを超える前に取得件数が100件を下回ったら、その期間の記事は全て取得したということ。続いてさらに15日前の投稿を全て取得
- 1と2を繰り返す
- 一番古い記事(2011年のもの)を取得したら終了
という処理です。これによって記事を投稿したことのあるユーザーネームを全て取得できるので、この後にそれらのユーザー情報を一人づつ取得します。 Qiitaは1時間のAPIコール回数に1,000回という制限があります。そのためコール回数が1,000回に到達すると、1時間処理を止めるということもしています。
今後の展望
今後もし利用者が増える見込みが出てくれば、いろいろ機能を追加していきたいと考えています。 (ここまで書いたようなニーズがあること、そしてサービスがそのニーズに対応できているかと考えられたらというイメージです。)
エンジニアを探す側が募集をかける
今会員管理機能はありませんが、探す側が例えば案件の登録や勉強会、イベント等を登録できるとより双方向のアプローチが実現できると考えています。
Qiitaのユーザーアカウントと連携
Qiitaアカウントと連携、つまり本人だと特定できればいろいろな広がりがあると思っています。 例えば、募集に対して応募したり、募集者しか見えないような情報を記載できるようになります。こんなプロジェクトがしたい、こんな仕事がしたいといったことをプロフィールに追加できると、よりマッチングという意味で充実すると思います。 さらに、Qiitaには組織(Organization)という概念もあり、どんなスキルセットのエンジニアが所属しているかがわかるようになっています。 例えば自分のスキルセットから、同じようなスキルセットを持った人が多い会社を探せたりすると、自分の活躍のフィールドを見つける、広げるということの助けになるかと考えています。
想い
自分自身エンジニアのはしくれなので、よりエンジニアのためになるような形で強化していきたいと思っています。 なにかご意見・ご要望・ご指摘あればどしどしいただければと思います。