ABO ファクトリーのブログ

3PS(3Dプリンター共有)サービスの開発 趣味のプログラム。3Dプリンターを利用した作品を行うサークルとして活動していきたいと思います。

一般的なログイン サイトの仕組み

一般的なログインサイトの仕組みを自作してみました。
開発環境はLaravelを利用しているので、ユーザID(メールアドレス)、パスワードをDBに挿入、認証させるのはフレームワークの機能なので省いて、全体のサービスとしての仕様の概要を話します。


一般的にユーザーID、パスワード認証の仕組みを実装しようとすると以下の機能が必要になります
・ユーザ登録をする
・ログインをする
・メール認証(ユーザ登録で登録されたアドレスが本当に正しいアドレスかの確認)
・パスワード忘れ
・サービスの退会処理

ユーザ登録してログインするだけならすごく簡単なのですが、それに付随する機能を作成するのが面倒です。
自分の場合他のfacebookなどのSNSアカウントでもログインできるようにしているので、他のログインシステムと整合性を取るための仕組みが必要でした。


- シーケンス、フローチャート

f:id:abofactory:20150605083919j:plain


1, ユーザID(メールアドレス)、パスワードをサーバに送信
これは簡単にこの2つをサーバ側にPOSTするだけで問題ありません(javascriptなどでチェックはしてください。)


2, DBに仮登録
postされたデータをDBに挿入、メールでのURL認証がまだなので、その辺はフラグ操作で仮登録のフェーズに設定してください。
一般的なSNSではユーザ登録後に認証URLがメールで送信されてきて、それをクリックしたら完了というのが多いです。これは登録したメールアドレスが本当に本人のものかを確認するためのチェックです(当たり前です)
なので登録したメールアドレス+日付などの文字列のMD5でユニークな認証キーを作成して、それを登録ユーザにメール送信します。
http://3ps-net.com/chk?hash=xxxxxxxxxxxxxxxxxxxxx のような感じになります。

もちろんサーバ側はユニークな認証キーとユーザIDを紐づけて保存します。


3, 認証URLの選択
登録者は届いたメールの認証URLを選択します。
嘘のメールアドレスを登録しない限り、登録したメールアドレス(自分)に認証URLは届きますよね。


4, 正式に登録完了
認証キーのURL(GET)にアクセスがあったのでサーバ側は認証キーを検索、ユーザIDを求めて、このユーザIDは正式にユーザ登録が完了したことになります。


以上です。
あまり既存の資料を参考にせず、自分で考えたので間違いがあれば教えて頂ければ嬉しいです。

3PSの独自ログインの機能を追加

他のSNSアカウントに寄生していた。3PSですが、3PSの独自アカウントを登録できる仕組みを追加しました。
個人的にはどのSNSのアカウントでもユーザが任意に識別できればこだわりはないですが、各SNSのアカウントを保有していない人も出てくるだろうと思い追加しました。


プログラム的にはログイン回り自体の機能はLaravelのフレームワークを使えば簡単なのですが、パスワードを忘れた、メール認証の確認メールの送信、他のSNSアカウントとの影響・・・などなどログインの機能の周りの部分を作るのがけっこう手間(時間がかかる)かかりました。DBの構造は独自アカウントの導入も考えて他ので変更しなかった、この辺はうまくハマってくれてよかった

f:id:abofactory:20150603155846j:plain
f:id:abofactory:20150603155905j:plain

3PS

やっと最低限の機能を実装が完了してきたので、今回は今自分が作成しているサービス、3PSの説明を書きたいと思います。


3ps-net.com

- どういうサービス??

ユーザー間で3Dプリンターを共有して物づくりを楽しもうというサービス

3Dプリンターを持ってるけど使っていない時間がたくさんある。3Dデータを作成したけど出力するための3Dプリンターを持っていない。
この2人をマッチングさせるためのサービスです。 物づくりのシェアリング サービスです。

- 3PS自体の利用料金は?

無料です。

- 3Dデータの出力に費用は必要ですか?

3Dデータの出力にかかる費用は、3Dプリンターの保有者と3Dデータの出力希望者の間で決めてください。
例えば、3Dプリンター保有者が使っていない時間で他の人のデータを出力する場合

このような3Dプリンターのジョブを3PS上に作成します。(例)
f:id:abofactory:20150530200853j:plain

3Dデータの出力希望者はこの掲示を見て興味があれば出力依頼をだします。


逆に、3Dデータを作成した出力希望者も自分から3PS上に出力依頼を書き込み、出力してくれる3Dプリンターの保有者を探すことができます。
f:id:abofactory:20150530204445j:plain

このとき、どの素材?どのぐらいのサイズ?どのくらいの料金?を明確に書くことで円滑に連絡がとれます。

- 安く出力できるの?

現在、外部出力のサービスでは、100mm四方の立体で2~数万円の出力費用が必要になるところがほとんどです。(その分、光造形などの高クォリーティーな出力方法になります)

3PSではユーザー間で出力費用を決めます。より安く、高クォリーティーな出力が可能なユーザーを探してください。1時間、数百円で出力可能なユーザがを見つけることも可能かもしれません。


今後、3PSは3Dデータ出力コミュニティーの場としてのサービスを中心により使いやすいインターフェイス、機能を追加していきたいと思います。

Ripple

今日は少し3PSのこととは違う話。気分転換に書いてます。

- Ripple

Rippleという電子送金プロトコル(IOUトレードのプロトコル)に興味があり2013年末ぐらいから手を出しています。 世間ではまだ認知が低いですが仮想通貨のRipple(xrp)といえば少しは知っている人もいると思います。 自分はRippleを仮想通貨という位置づけではなくIOUトレードのシステム(プロトコル)という風に認識しています。

具体的に手を出すというのは、Ripple内の通貨(正確にはハブ通貨)であるxrpを定期的に買い増ししています。

2013年から手を出しているということはWCGのマイニング、RTSの創立、Ripple LabsでのJEDの離脱、xrpの3.5円突破、最近のRTJ事件などけっこうリアルタイムで事件?を目にして一喜一憂しているということです。

で! Rippleとは何ぞやといいますと・・・・
・ありとあらゆるものをGW(ゲートウェイ)というところでIOU(電子手形)にします。
・このIOUをRippleというシステム上でトレードしましょう。
・このトレードはRipple上の通貨であるxrpでトレードをしましょう。

という感じになります。 ・・・・よくわかりませんよねw


- 具体的に何ができるか

円からドルへの両替がほとんど手数料なくできるかもしれない。
海外への送金でほとんど両替手数料がほとんどなく送金できるかもしれない。


今現在、上に書いたGWというのはお金をIOU(電子手形)に換える。その逆でIOUをお金に換える作業をしています。
例えば1万円をGWに振り込むと、(日本で有名どころだと東京リップルJPY)GWは自分に1万円と交換できるIOU 10000JPYを発行します。 このIOUを現金に換えたければ逆に10000JPYをGWに送信すれば、GWは自分の口座に1万円を振り込んでくれます。 厳密には手数料を取られます。

この記事でよく出てくるIOUですがこれはI OWE YOU(私はあなたに借りがある)の略語です。
GWにお金を振り込むとGWはあなたにIOUを発行します。簡単に言えば1万円振り込めばGWは1万円分の電子手形(IOU)を発行するイメージです。


- 送金、両替の仕組み

例えば円をドルに両替したいとすると
日本円のIOUであるJPYをRippleシステム内の通貨(厳密にはハブ通貨)に両替、このXRPを逆の手順でドルのIOUに両替、このIPUをGWに送信、GWはドルを自分の口座に振り込むということで両替が完了します。まぁ現実的にアメリカGWの振込先の銀行口座を持つ必要があるので少し難しい作業です。

ただ、アメリカのとある人に100ドルを送金する必要などがあった場合、ビットコインでは価格変動があるので100ドル分ちょうどを送金するというのは難しいです。 Rippleの場合、送金者側で日本円->JPY(IOU)->xrp->USD(IOU)の順に変換して、100ドル分のIOUを自分側でトレード入手し送金先にIOUを送信します。
送金先の人はUSD(IOU)を発行元のGWに送信すると、自分の口座に100ドルが振り込まれ仕組みになります。


そこで、普通の人だったら不思議に思うことですがIOU->xrp、xrp->IOUのトレードはどういう仕組みで行うのか??
これはFXや株などでおなじみの売りたい人、買いたい人のレート(ask/bid)で決まります。 ただ取り扱っているのがお金と交換できる(IOU)なので現在の為替レートと大きく乖離すればキャピタルゲイン目当てでの取引が増えるため、為替レートと大きくずれることはあまりありません。GWがお金を持ち逃げ?したときにそのGWのIOUレートがめちゃくちゃになったのは見たことあります(RTJの事件)

- 個人的に思うこと

で、私が投機しているRippleのxrpですが、これは先ほど言ったRipple内での通貨、IOUトレードのためのハブ的な存在なので私はハブ通貨だと思っています。このxrpにも決まりがありRippe内部では初めに1000億xrpは発行されその後発行されることはありません(※) IOUのトレードを行う時にホンのわずかですがxrpが手数料として失われます(0.01xrpとか) なので厳密にいえばデフレ通貨ということになります。
Rippleが運用を始めて何年かになりますが、今の総発行量は約99,999,034,242です。

※今現在のRipple Labsの仕様です。

個人的にはxrpのレートが上がればもちろんうれしいですが、RippleのIOUトレードという理念が好きで投機しています。
今は世界のメインとなるGWは各国の通貨のIOUを発行していますが、そもそもGW自体Rippleを利用しているユーザが誰でもなることができます。 そして通貨のIOUだけにとらわれずに、とあるサービスを作成したのでこれを利用するためのチケットとしてIOUを発行して配布するとか、会社設立時の株券のようにIOUを発行して資金を確保するとか(これは現法律的に難しいかも)こういう利用方法もあると思います。

3Dデータ出力希望者側からジョブ(出力依頼)の書き込みをできるようにしました。

よく考えると、3Dプリンター持っている人と、持ってない人だと圧倒的に持っていない人の方が多いですよね。

3Dデータを出力したい希望者が書き込みをして、それを3Dプリンターの保有者が返信する項目を追加しましました。

出力検索のカテゴリーとしては以下の3つになります。
3Dプリンター保有者
3Dプリンター保有者のジョブ(できること)
・3Dデータを出力したいユーザのジョブ(出力依頼)

この3つ目を追加するために、出力の画面をちょっと改良していました。
プログラムというよりviewの変更、こっちの作業の方が疲れる・・・


f:id:abofactory:20150528124253j:plain

ユーザ間でファイルの共有とジョブ(3Dプリンターでできること)をSNSでシェアできるようにしました。

- ユーザ間でのファイル共有

3Dデータの出力希望者、3Dプリンターの保有者に出力依頼する場合、必ずデータの受け渡し方法が必要になります。メールや既存のファイル共有ストレージを利用していただいてもかましませんし、3PSのメッセージ(連絡用)にファイルを共有する機能を追加しましたので、こちらを利用していただいてもかまいません。
ファイル共有はメッセージのやり取りをしている相手のみダウンロードが可能です。

f:id:abofactory:20150527082503j:plain


細かい話として、ファイルのアップロードは公開ディレクトリ以外のユーザーディレクトリに保存し、ダウンロード時は直リンクではなく、ユーザIDとアップロードIDなどで保有者と送信先をチェック後、サーバー側からダウンロードさせる(Content-Type application/force-download)で行っています。ファイルのアップサイズは3Dデータを送信することを考え1ファイル50MBまでアップ可能で1週間後に自動的に削除されます(サーバー容量の都合上ご理解ください)

※念のため重要なファイルなどはzip圧縮などでパスワードをかけて送信してください。仕事でもどんなに厳重なファイル管理状態でも重要ファイルにはパスワードかけてました(私) 念には念をいれて。

- 公開したジョブ情報をSNSにシェアできる機能を追加しました

公開したジョブ情報を各SNSでシェアできるようにしました。 公開ジョブは3PS上で一覧表示されますが、それ以外にもユーザが自分からシェアして外部に広告できるようになります。

f:id:abofactory:20150527082629j:plain


皆様に・・
3PSはまだスタートアップして間もないサービスです。サイトのユーザー数はまだほとんどいません。機能面でもコミニティーとしての最低限ができている程度だと思っていますが、開発している本人はやる気満々です。
今は3Dプリンター保有者でジョブに対して中々出力希望の連絡が来ないという方もでてくると思いますがしばらく、ユーザーが増えるまでは忍耐強く待っていただければ嬉しいですm(_ _)m

■今後の追加機能
・出力者の出力場所を地図上に表記できるようにしたい。(希望者のみ)
 近場の出力者を見つければ当日納品も可能になるかも・・・
・フォーラムやコミニティーの充実
・ジョブ情報の検索機能(ユーザが増えれば必然的に必要になる)
・作品などをアップできるギャラリーの作成
・出力希望者からもジョブを作れるようにしたい
etc・・・・