18
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

ノンプログラマーがNEMブロックチェーン使ってアプリを作ってみた

この記事は nem Advent Calendar 2019 21日目の記事です。

はじめに

完全なノンプログラマー(人生で1度もコード書いた事無い中年)が何を思ったか
NEMのブロックチェーンを利用して、Androidアプリを作ってみた記録となります。

自己紹介

日常生活でコードを触ることも見ることも無い 仕事をしつつ

nembear(ねむぐま)

という名前で、暗号通貨NEM界隈でアート活動をしたりとかイベント開いたりとかしてます。

詰まるところ、「Qiita」??「Github」??「kotlin」??
だった、中年です。

本当は外注する予定だった個人アプリなのですが、
「NEMは簡単。自分で作ってみれば??」
の一言で
NEMのブロックチェーンを利用したアプリケーションを作成しました。

経緯詳細はこちら(長文注意)

何を作ったのか?

※クリックでGooglePlayに遷移します。
header_mdpi - 2.png

アプリ概要

特定の送信先アドレスに、暗号通貨NEM(XEM)を送金すると
表示された画像が1枚更新されるだけのシンプルなアプリです。

※1000回更新されるとイラストが完成する仕掛けです。
 送信先アドレスは固定されているため、
 自身が送金だけでなく、誰かの送金でも更新されます。

gattai.png

アプリ詳細

NEMブロックチェーン利用箇所

①:NEMのAPIを利用し、最新のNEMトランザクション情報(送受信情報)を取得します。

//指定したNEMアドレスのトランザクション情報を取得
rxClient.accountTransfersIncoming(nemADDRESS)
 .subscribeOn(
    Schedulers.io()
   ).observeOn(AndroidSchedulers.mainThread())
 .subscribe({ transactionList ->

②:①で取得したトランザクション情報内の「ID」を保存します。

//トランザクション情報内の「ID」を取得
val id = transactionList.get(0).meta.id

③:30秒間に1回、保存した「ID1」と新規で取得した「ID2」を比較をし、
  更新されていた数だけ、画像を更新させます。
※本アプリでは過去25個までトランザクションを遡り「ID」を取得⇒比較してます。
 その中で何回更新されているかを取得し、その数だけ画像を更新している寸法です。

画面/操作箇所

①:ユーザは「TIP」or「TIP+MESSAGE」のみ選択できます。
 ⇒TIP:TIP数の入力が可能
 ⇒TIP+MESSAGE:メッセージ入力後、TIP数の入力が可能
gattai2.jpg

②:①の入力情報を保存し、DeepLink機能で、NEMのWalletアプリである
  「RaccoonWallet」に情報を渡し、Wallet側でNEMの送金を実施します。
※本アプリ側ではTIP数の入力後、自動的にRaccoonWalletが起動されます。
 送金処理に関して自前で作成する必要がないことは大きなメリットだと思います。

//RaccoonWalletに情報を渡す(userText1==メッセージ,userText2==Tip数)
  val intent = Intent(Intent.ACTION_VIEW, Uri.parse
                    ("https://raccoonwallet.com/payment?addr=${ADDRESS}&amount=${userText2.toInt()*1000000}&msg=${userText1}"))
                startActivity(intent)
                })

※RaccoonWalletが起動(TIP数:「100」と、メッセージ:「こんにちは」が反映しています。)
d_Jxz4uI.jpg

③:メッセージを入力した場合、そのメッセージがアプリ上で表示されます。

2nTJVd2a.jpg

NEM-kotlinを直ぐ始める方法

上記までのNEMブロックチェーン部分をkotlinで導入する方法をこちらにまとめました。
これさえ読めば直ぐにNEMアプリ作りを開始できるはずです。

qiita2.jpg

なんで作ったの??

「アート作品にダイレクトにTIP出来る(運営に手数料を取られない)ツールが欲しかった」

私の知る限り、
支援行為に対し運営に手数料が取られないプラットフォームはありませんでした。
だったら自分で作ってしまおうといった流れです。
ブロックチェーンにより、何時TIPされたかを全員で共有できる利点を生かし、
完成された作品への投げ銭ではなく
投げ銭することで作品が完成するようにデザイン
いたしました。

アーティストが、
NEMのブロックチェーンを利用しアプリを自作することで
「アーティストは自身の活動が潤い、
 ユーザは好きなアーティストの活動にダイレクトに支援出来る。」

自作TIPアプリがアート活動の新たな手法となればと作成しました。

アプリのこだわり

NEMブロックチェーン

送金可能であること。
送金(着金)した履歴が誰にでも確認できること。
着金した履歴を取得できること。
この3点を簡単に実装できること。

こちらをすべて満たしていたものがNEMブロックチェーンでした。

アーティストへの応援として、NEMをTIP(送金)をしたインセンティブとして
画像が更新され、1枚のイラストが完成に近づく設計なのですが、

そのTIPした実績はブロックチェーン上に刻まれている
完成したイラストの一部が、自身のTIPで作成されていることを証明出来ます。

1000回の更新で完成するイラストのなかで、
995番目にTIPしたとしたらば、それが自分のTIPあることが証明出来るのです。

これにより1枚のイラストに、
皆で作り上げた「ブロックチェーンを利用したアート作品」
としての付加価値(ストーリー)を生みだすことが出来ました。

こんな風に使えるようになれば

応用すると、
募金に最適なアプリになるのでは無いかと考えます。

例えば、みんなの募金により完成されていく千羽鶴のイラストがあったとしたら...

ブロックチェーンを利用することで、
どのアドレスから何時何枚送金されたか?
募金先のアドレスから何時何枚出金されたか?(不正が無いか)
改竄不可能かつ、誰にでも確認できるようになります。

これならば安心して募金も出来ますし、
リアル千羽鶴の処理に悩むこともありません。

そして募金者は自身が千羽鶴の一部となる体験も出来るのです。

シンプルですがブロックチェーンと組み合わせるだけで
24時間世界中から送金可能、且つ、収支の透明性が保障されます。

難しそうな技術も、アートなどと結びつけることで
色彩が生まれ、親しみやすいものに変わると思っております。

使用している技術

  • kotlin...プログラミング言語
  • RxJava...リアクティブプログラミング(非同期処理に使用)
  • NIS1...NEMブロックチェーン(データベースとして使用)
  • DeepLink...Walletアプリへの連携として使用

参照した文献

NEMのブロックチェーンを使用してみて

NEMを知った時から、
「NEMは簡単だから。」
と言われて育ちましたが。
「それはイケてるプログラマーの目線だろうぜ、きっと。」
と思ってました。
では、実際に素人がNEM(NIS1)を触ってみて感じたことを書いてみます。


NIS1とは?

nemのネットワークを構築しているノードをnem Infrastructure Server(以下NIS)と呼びます。
nemでは、このNISが提供するAPIを用いることでチェーンへアクセスできます。

以上、nem Advent Calendar 2017 より引用


良かった点

①:コードを1行書くだけで、NEMのトランザクション情報を取得することが出来た
※アプリ作成で最難関だと思っていた、NEMブロックチェーン部分は即解決しました。
 その結果、アプリ化する為の通常の設計作業に時間をかけられました。

②:kotlin用のNEMライブラリが存在していた
※参照文献にも記載しましたが、nemをkotlinで書くのならこちらを読むのが最適です。
 むしろこれ以外何を読むんだというレベルです。

③:直ぐにワクワクすることが出来た
※簡単にNEMを利用した情報を取得する出来た感動は、
 開発初心者のモチベーションを大きく向上さてくれました。
 

気になった点

①:簡単すぎる???
※素人の私には最高なことなのですが、好奇心旺盛な開発者殿からすると味気ないと感じられるのか??
 と感じました。ですが、ブロックチェーンが簡単すぎるって素人に思わせるって凄い利点だと思います。
 コストが最小限に抑えられて、欲しいものが手に入る。誰が文句あるんだという 笑
 (私が実装した内容のレベルが低いことを前提として&勘違いを含んでいる点も加味して)

開発メモ

ゼロの状態からはじめるので、3日坊主にならないように目標を決めました。
5か月後にこのアプリを利用した個展を開催すると。
そして、やると言ってやらないと今後の付き合いに影響が出るだろう人
やるって伝えました。(これが1番効きます 笑)

開発期間

◆全4ヵ月間 (1日平均:1時間~2時間)

  • 1ヵ月目:設計書作成&NEMのトランザクション情報を取得保存
  • 2ヵ月目:NEMのトランザクション情報を比較して、画像を更新
  • 3ヵ月目:NEM送金する為に、RaccoonWalletと連携
  • 4ヵ月目:デザイン調整

※こんな感じでやりたいこと(トランザクション情報取得からの画像更新)自体は2ヵ月ぐらいで完成しました。
 そこからは、デザインにこだわり始めると無限に時間がかかる印象です。

困った点

  • 調べたい内容を、何というワードで検索すれば良いのかが分からない(専門用語難民)
  • 検索できてもkotlinじゃない(JavaがHitすることが多い)

僕がした解決方法

  • エンジニアの知り合いを作って教えてもらう
    ※例えば東京ならば「NEMもくもく会」など、エンジニアさんが集まるイベントが開催されてますので
     参加してみることが近道だと思います。そこで用語などの知識を入手してみてはいかがでしょうか?

  • Twitterで#nem で疑問点をつぶやいてみる
    ※間違いなく1日以内に誰かから何かしらのリアクションがあります。
     リアルイベントに参加が厳しい方は、こちらをおすすめします。
     

  • 何も考えず、検索でHITしたものを試してみる
    ひたすらトライエラーです。Javaで書かれていても、androidStudio内に入れてしまえば
     そこそこkotlin化してくれるので、先ずは試して失敗して試しましょう。
     確実に扉が開ける時が来ます。(もしくは、別の機会にその失敗がヒントになったりします)

  • PCを持ち歩く
    ※突然、解決策が浮かんだりします。
     イメージとしては、ゼルダの伝説の謎解きを急に思いつく感じです。
     自分のコードは嫌でも頭の中に入ってしまうので、
     仕事中でも「あれ?あそこをこうしたらいいんじゃない?」
     と胸がときめきます。その時、直ぐに試せる環境を作っておくことは大切だと思います。

自分でも作ってみようかな?って思ったら

ノンプログラマーの皆様へ

きっと大丈夫です。僕が出来たのですから。
初心者だから、先ずはチュートリアルから初めて、
「ボタンを押したら、メッセージが出てくる。」
みたいな誰も興味ないアプリを作ってたとしても3日で飽きます。絶対。
そのアプリに未来を感じないからだと思います。

だからこそ、スタートからブロックチェーンを絡めてしまう。が正義です。
今、世界にブロックチェーンを使ったアプリケーションなんて数えるほど。
その中に紛れ込めるんです。NEMを使えば。僕ら初心者が。

僕らにはプログラムに対するルールもなければ、常識もありません。
その書き方はカッコ悪いとか、普通やらないとか、そんなしがらみがないのです。
ノンプログラマーであるが故の自由さで楽しみましょう。

僕が作成したNEMアプリ「F1000」のNEMの部分の作り方を第2部に書き込みますので
是非こちらも参考にしていただければ幸いです。

プログラマーの皆様へ

【各種言語のAPIラッパー】こちらを参照いただけますと
プログラムの経験者であれば直ぐにNEMを利用してのアプリケーションを作ることが出来るはずです。
新たなNEMアプリを楽しみに待ってます!!

まとめ

ノンプログラマーがNEMのブロックチェーンを作ってアプリを完成させました。
詰まるところ、誰でも出来るということだと思います。

NEMなら「全ての人にブロックチェーンの力を」を実現出来そう感が凄い。

ご存じの通りこれから「catapult」により、NEMも大きくUPDATEされます。
ですが逆に言えば、「僕はNEM1から触っていたよ」と言えるチャンスかもしれません。
是非、ノンプログラマーさんこそチャレンジしてみてはいかがでしょうか?
スナック菓子を食べるようなプログラム。
鼻歌交じりのプログラム。
気ままに遊んでみてくださいませ。

長文お付き合いいただきありがとうございました。
2017も2018も眺めているだけで、
絶対に僕には関係のない領域だったネムアドに参加できたこと。
もの凄く嬉しく誇らしく思います。

お誘いくださいましたNEMberの皆さまとバビテク野郎に最大の敬意をもって。
ありがとうございます!!!

ねむぐま

お知らせ

『NEMberアンケート2019』

締切:2019年12月23日(㈪)
アンケート内容:
①今年のNEM漢字
②今年頑張ったNEMber
★アンケートはこちらから☆

去年に引き続き、NEMberアンケートとなります。
ちなみに去年のNEM漢字は「耐」でした。
今年はどうなるのか?是非是非、ご回答くださいませ!!

『大熊呑み2019』

開催日:2019年12月23日(㈪)
場所 :原宿某所
主催者:ねむぐま
継続こそ力なりってわけで、今年もダラダラやります。
NEMが気になるなら誰でも参加OKな、BBQ&コワーキング&LTイベント。
平日なのに11時~24時まで開いてますので。
夕方まではコワーキングスペースで勝手に仕事しててください。
夕方からはBBQを勝手にやってください。
僕はそれを見ているのが好きです。
これを見ているあなた様お気軽にいらしてください!!
IMG_0547.PNG

『nemセミナー2020(仮)』

開催日:2020年1月19日
場所 :都内の素敵な会場手配中
主催者:ちゃんかま
何だかものすっごい布陣がNEMのあれこれを教えてくれるイベントだそうですよ!
私もLTやります.....(まさかここまで強い布陣だとはつゆ知らず)

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
18
Help us understand the problem. What are the problem?