
Outline
この文章は、bitcoinのSegWitの仕組みについての調査まとめです。内容はbitcoin coreのソースコードに基づくものです。(blockでの扱いの話は含みません。)
基礎知識: bitcoinのtransaction
bitcoinにおいては、blockchainは知っているのに、transactionの話をいっさい知らない場合が多いので軽く言及する。blockchainは、transactionの順序付けを可能にする場をつくる仕組みであって、システムとしてその場でどういった活動をするかの意味付けはtransactionのほうにある。
bitcoinでは、walletの本質は公開鍵暗号での鍵ペアのことである。公開鍵暗号での署名検証システムとは、署名対象データに対して、非公開鍵を用いて署名データを作成し、他が公開鍵を用いて署名データを検証することで、非公開鍵を持つ当人がその署名対象データ(の意味内容)を承認している、ということを保証するものである。Aさんが、「Bへ100を送金」というデータに署名すれば、他の誰でもないAだけがAからBへの送金を行った、とみなすことができるようになる。
bitcoinの基本送金の仕組みは、「送金」情報として送金相手のwalletの公開鍵(のハッシュ値)を指定しておくことで、それを「使う」ことに対して正しい署名を行える非公開鍵を持っている相手を限定する、というものである。送金自体が値を転送するのではなく、額に対して錠前をとりつける施錠(lock)に例えられ、使うことは錠前を解錠(unlock)することに例えられる。
そして、bitcoinでの「使う」という状況は、新たな「送金のために使う」ことである。いわば錠前を付け替えているようなものである。つまり、bitcoinというのは、「前の送金を使って、新たな送金を作る」活動を皆が行いあっている世界である。
bitcoinのこの個々の「送金」にあたる情報がtransactionである。transactionは、前のtransactionを「使う」情報であるInput(txin)のリストと、「送金」を指定する情報であるOutput(txout)のリストで構成されるデータである。
txoutには金額と、送金相手の公開鍵のハッシュ値を中心とした本人証明方法が入った情報が入っており、後者をscriptPubKeyと呼ぶ。txinには前のtransaction(のtxout)の指定と、署名などその本人証明に必要な情報が入っており、後者をscriptSigと呼ぶ。
transactionの検証方法
この「送金で使う」関係に対する検証方法とは、scriptSigに指定された前のtransaction(のtxout)にあるscriptPubKeyを連結したスクリプトコードとして、FORTHに似たスタック型インタプリタで実行することで、「失敗しないで終わる」かによって検証するものである。スクリプトコードの何処かが間違っていれば実行はエラー終了するのでそのtransactionは不正なものとみなされ、blockには追加されない。
正しい署名検証関係にある txinのscriptSigとtxinで指定されたtransactionのscriptPubKeyの組は、以下の内容になっている:
- (このtransactionの)scriptSig:
<Aのこのtransactionへの署名>
<この署名に使ったAの公開鍵>
- (前のtransactionの)scriptPubkey:
OP_DUP
OP_HASH160
<Aの公開鍵のハッシュ値>
OP_EQUALVERIFY
OP_CHECKSIG
これを実行すると、
- scriptSigの公開鍵から、ハッシュ値を計算する
- その算出ハッシュ値が、scriptPubKeyのハッシュ値と等しいか検証する
- scriptSigの公開鍵と署名で、このtransactionに対して署名検証をする
が実行される。もし当人でなかったり、transactionの内容が変更されていたりすれば、2か3で失敗して実行終了することになる。
transactionの署名とtransactionのID
まず、基本として、署名する対象のデータには、署名の結果として生成される「署名データ」を含めることはできない。
このためbitcoinではtransactionを署名する場合や署名検証する場合に、transactionから署名データ部分を空にしたデータを作って、その署名を含まないデータに対して署名したり検証したりする。
一方、txinで指定される、前のtransactionを指すためのID(txid)には、(署名データを含む)transaction全データを対象としたハッシュ値を用いている。
Transaction Malleabilityとは
transactionから署名対象のデータを作るとき、比較的複雑な処理をするのだが、そのために正しい署名のtransactionに対して、そのscriptSigの編集可能性が存在することになった。編集と言っても、署名を別人のものに入れ替えるようなことはできなくて、ただ冗長な命令を埋め込むようなことなので、伸展性(malleability)とよんでいる。
しかしこのレベルの変化でも、scriptSigが編集されうることによって、正しく検証できるtransactionのハッシュIDは変化しうることになる。これがtransaction malleability(のscriptSig Malleability)である。
実際、block内にあるトランザクションのハッシュIDではなく、自分で発行したtranscationのハッシュIDを基準に状態をチェックしていたシステムでは、これを攻撃手段として利用されたこともあった。
また、bitcoin上でマイクロペイメントなどの複雑なシステムを構成する場合、複数の関係するtransactionを(block追加前から)同時に扱う必要でてくる。こういった場合にtransaction IDがblockに乗ったときに変化してしまうと、できるシステムの可能性が制限されることになる。
SegWit化
この問題は、正しいtransactionのIDによるの関係がズレうる点に尽きる。そこで、transactionの中から署名関連データ(witness)を明示的に分離する構造に変更するのが、SegWit(Segregated Witness)という仕組みになる。
SegWitでのtransactionのハッシュIDについては、署名を含むものと含まないものの二種類が用意される。他transactionとの関係においてtxidとしてtxinなどのポインタで使われるのが署名を含まないハッシュ値で、一方block内のmerkle treeなどの検証情報で使われるのが署名を含むハッシュ値(wtxid)となるらしい。
bitcoinソースでは、
- https://github.com/bitcoin/bitcoin/blob/master/src/primitives/transaction.h
- https://github.com/bitcoin/bitcoin/blob/master/src/primitives/transaction.cpp
のCTransaction
にはGetHash()
とGetWitnessHash()
とがあり、前者は署名を含まないハッシュ、後者は署名を含むハッシュ値を作るようだ。
bitcoinのインタプリタでのSegWit処理
SegWit提案のBIP141によると、witnessを使う送金スクリプトは、
- witness:
<signature>
<pubkey>
- scriptSig: (empty)
- scriptPubKey:
0
<20byte-keyhash>
で命令が一切含まれない、見た目上はただスタックに積むだけでおわるコードとなっている。
これはbitcoinのインタプリタ自体が、記載されたコードだけを実行するだけのものではなく、コードやスタックの特定のパターンに反応して特別な処理を実行するようになっているせいである。つまり、bitcoinのインタプリタというのは、コードに書いて有る命令だけを実行する一般的なインタプリタとは毛色の違うものである。
詳しくは、
の1400行目あたりにあるVerifyScript()
を見るとよい。
このコードパターン(scriptSigが空でscriptPubKeyの最初が0から15の間)で、VerifyWitnessProgram()
が呼び出され、その中で、続くのが20バイトのデータのときは、従来の送金チェック用のscriptPubKeyのコードが組み立てられ(OP_DUP
とかを書き込んでいる部分)、EvalScript()
を呼ぶコードとなっている。
ここではwitnessの内容は、(コードではなく、)このEvalScript()
呼び出しでの初期スタック状態として使われている。また、続くデータが32バイトハッシュの場合は、witnesswの内容をスクリプトコードとして実行するようになっている。
ちなみに、multi-sig等で展開されるredeemScriptなども同様のパターン反応での処理実行がソース内に埋め込まれているのであって、コード展開命令(eval)が入っているわけではない。(インタプリタのソース上では、スタックからとりだして展開したpubkey2
でEvalScript()
している)。
こういったパターンは、CScript::IsPayToScriptHash()
などでのようにベタにパターンチェックされている。
補足: Signature Malleabilityについて
正しく受け入れられる署名データ自体に複数の表現が存在しうることを、Signature Malleabilityという。bitcoinにおいては、以下の状況で存在している。
- 後ろで使っていたOpenSSLが仕様に正確でない署名形式もゆるめて受け入れていた
- ECDSAでは、署名が(r, s)なら、(r, -s mod N)も受け入れてしまう
- (そもそも)非公開鍵を持っている人には、同じ対象データへの正しい署名データをいくらでも作れてしまう
そして、暗号系やその実装において将来的なMalleabilityが発見されることがないとは言えない。とのこと。
ちなみに、二番目のECDSAで-sでもただしい署名扱いになる、というのは、以下の手順で確認できる。まず、上のリンクのWikipediaに検証方法の手順において、sを-sに入れ替えると、つづくw、u1、u2も-w、-u1、-u2になって、求めた曲線上の点もマイナスになる。そして楕円曲線暗号では、点p=(x,y)のときの点-pというのは(x,-y)のことである。しかし、署名検証の最後の手順では、このうちx側だけをrと比較するだけであるため、(r,-s)もまた正しい署名となりうることがわかる。
三番目の話は、署名データを作るときに乱数を使っているので、乱数値を変えて計算するだけで正しい署名データをたくさん生成できる。
このようにSignature Malleabilityのほうは避けられないので、ハッシュ値を参照用ID扱いするような仕組みを組み込むシステムを考えるのならば、SegWit同様に署名データはハッシュ対象に含めないほうが良いだろう。
- Angularで可視化しながら、3通貨アービトーラージ(内部アービトラージ)の自動化実験をしてみた
- [Zaif]Pythonで簡単に仮想通貨の取引が出来るようにしてみた
- NEM のトランザクションを作る
- Bancor プロトコル:Smart Tokenの革新性とは。「Coincidence of Wantsの解決」とそれがもたらす「取引の再発明」
- IOTA【技術解説】署名と承認。 – 改訂版
- IOTA:【入門】トランザクション大解剖!ウォレットは裏で何をやっているか。
- Bitcoinのコードをまとめるためだけのページ
- Raspberry piを使って仮想通貨取引自動化してみた
- Ethereumで仮想通貨を発行する
- Ethereum: Raiden Networkを触ってみた!(環境構築と起動)
- ブロックチェーンエンジニア Lv. 1 —スマートコントラクトをデバッグするぞ—
- NEMアプリケーションを構築するための開発者ツールとしてのNanoWalletをインストールする
- bitFlyerなど仮想通貨の取引所や販売所のAPIで、ゴニョゴニョのリンク集
- ブロックチェーンエンジニア Lv. 2 —ガチャを実装する—
- macでダブルクリックでMoneroをマイニングできるようにしてみた
- Pythonでcoincheck APIを使ってみる。 ~自動取引プログラム作成に向けて~
- ラズパイでBitZenyをCPUマイニングする -組み込みエンジニアだってお金が欲しい-
- LinuxでXPをPosマイニングする(CUI版)
- Vue.js + Nuxt.jsでコインチェックのチャート表示サービスを作った
- コピペとブラウザ”だけ”で作る、イーサリアムの仮想通貨
- monacoind 不要の faucet を作ってみた (骨格だけ)
- IOTA:【随時更新】最速でフルノードを立ち上げる。
- 仮想通貨自動取引入門
- 国産仮想通貨KOTOの作業メモ
- 仮想通貨取引所(bitbank.cc)の公式APIを使って仮想通貨の取引をする方法
- Swiftで始める仮想通貨システムトレード入門
- ビットコインの裁定取引の自動化を考える
- Script入門
- 世の中にはびこるコンセンサスアルゴリズムを調査した件(Proof of X)
- [知見求む!] 確定申告用に仮想通貨取引の帳簿アプリを作ってみた
- IOTA ~ポストスマートフォン時代のフィンテック~
- Bitcoin開発環境を構築する
- ブロックチェーンはどのようなサービスで活用できるのか
- Zaif Paymentを使ってビットコイン&モナコイン仮想通貨決済システムをつくってみる
- IOTA:【実践】APIでウォレットを実装。受送金と残高計算。
- IOTA:【技術解説】マルチシグを理解し実装する。
- 0から仮想通貨を作るために知っておくべき技術【第1回アドレス編】
- GAS(GoogleAppsScript)で「社内通貨」を作ってみた話
- Ethereum入門 〜独自トークンの発行〜
- 流行りに乗って仮想通貨(Bitcoin etc)を自動取引できるwebサービス作った
- ビットコイン自動裁定取引アプリを独自に開発!(配布あり)
- ccxtを使って裁定取引botを作ってみたらなぜか虚しくなった件
- 仮想通貨NEMアプリ開発時ベストプラクティスのまとめ
- ビットコイン株価の乱高下に合わせて音色を奏でるプログラム作ったんだよ
- CryptoWatchのAPIを用いたローソク足チャート生成
- 【2018年版】有力ブロックチェーン特徴まとめ18選
- Python+Flask+Herokuで作るLINE bot (具体的な操作: Postback, carouselなど)
- 自動売買botの損益をpythonだけで可視化してみたらなぜかテンション下がった件
- Counterpartyでアプリを簡単に作ろう!
- ERC-918 マイニング可能トークンについて
- ブロックチェーンにおける主要な攻撃や問題まとめ
- Webエンジニアがサクッと社内通貨を作ってみた
- 円建で XEM 払いできる QR コードを作ってみる
- 月数100万アクセスをDB使わず超簡単にさばく
- 暗号通貨(Bitcoin, Monacoin)のプロトコルを理解する: 公開鍵と秘密鍵
- 暗号通貨用Webサービスを立ち上げるためのmonacoind(bitcoind)のビルドと運用
- わかりやすいブロックチェーン(blockchain)とは何か? の説明
- Mac OS X で bitcoind をコンパイル、インストールする方法
- Bitcoinの初期ブロックチェーンのDLを早くする bootstrap.dat
- Bitcoinの中本哲史論文を箇条書きでわかりやすくまとめてみた
- bitcoin.conf の書き方 まとめ
- 技術者向け Ethereumの基礎知識 (イーサリアム、エセリウム)
- Ethereum の Smart Contracts やアプリの作り方
- 技術者向けビットコイン、ブロックチェーンの基礎用語 まとめ
- ビットコインのブロックチェーンの技術的な説明 まとめ
- Bitcoin: bitcoind APIのまとめ
- Bitcoinの技術 Namecoin とは何か? 非集権型DNS?
- Proof of Stake とは何か?
- ビット・クラウド(Bitcloud)とは何か?
- 空きサーバで分散暗号通貨Quarkを掘る(基礎編)
- オライリー本「Mastering Bitcoin」の読書
- Bitcoin: サイドチェーン(sidechain)とは何か?
- 次世代非集権型インターネット MaidSafe とは何か?
- Bitcoin: OP_RETURN の技術的説明
- 暗号通貨の技術: Proof of Burnとは何か?
- [ビットコインの技術] マルチシグネチャの技術的説明
- オレオレコインの作り方(前編)
- 5分でできる razrbit SDK + Node.js でビットコイン・プログラミング
- ビットコインを勉強するためのサイトや本 まとめ
- ビットコイン2.0 とは? Bitcoin 2.0 資料まとめ
- そもそもお金ってなに?ビットコインを勉強する前に。
- ビットコインのウォレットの技術的解説
- Mastering Bitcoin: 5章 トランザクション のまとめ
- オラクル(Oracle)とは何か? ブロックチェーン
- 多くの賢い人がビットコインを学ばず後悔するというよくある話
- 【文字起こし】ビットコインウォレットサービスのセキュリティについて
- TradeWave使ってみた(PythonでBitCoin システムトレード)
- BIP39 MNEMONIC GENERATOR
- ビットコインの Lightning Network メモ
- Open Assets Protocolの実装 まとめ
- BitCoinとBlockChainにまつわる誤解ーそんなことはできない
- bitcore-nodeの導入方法(ブロックエクスプローラーinsightの導入方法)
- Zaif取引所(Bitcoin/Monacoin)のAPIをGolangから使う
- 全人類の口座残高を管理する――(1) Bitcoinの場合――
- Bitcoin faucet 〜 無料でBitcoin が手に入るカラクリ 〜
- 全人類の口座残高を管理する――(2) Ethereumの場合――
- Ethereumでコントラクトの監視 – Event –
- ブロックチェーンにできること、できないこと
- ビットコインのアドレス生成の仕方
- ビットコインの扱い方
- BlockChain は電子署名 2.0 となり得るか
- ビットコインのブロックチェーンから入金確認をする
- BitcoinをPythonのhashlibでマイニングしてみる
- Ethereum互換のノードをScalaでスクラッチ実装した話
- BitFlyer Ligntning APIをPythonで使ってみる
- 公開鍵暗号とRSA暗号の仕組み
- Proof of Work考、あるいは暗号通貨システムのガバナンスについて
- EthereumやLightningNetwork等のBitcoin改的な取組みは普及するか、という非技術的な<考察> その1
- ビットコインプログラミング超入門編
- 暗号通貨による札束の燃やし方(オーストラリア産中本哲史とチューリップ信託騒動に関連して)
- bitcoin-cliを使ったBitcoinAPI入門
- OpenAsset入門
- Bitcoin(Mainnet, Testnet)への接続方法
- P2SHとP2PKH宛のUTXOを使った送金から学ぶBitcoinの署名の仕組み
- CentOS 6.8(64bit)でbitcoind 0.10.4.0をインストールする方法
- [Zaif]Pythonで簡単に仮想通貨の取引が出来るようにしてみた
- サーバーレスフレームワークTruffleでÐappを爆速開発する ①Tutorial
- ビットコインの採掘って何なの?気になったので調べてみた
- bitcoindをcentos7にインストール
- ホットウォレットとコールドウォレットとは?
- 秘密分散DAO、もう一つのクリプト2.0
- ビットコインウォレットの開発にはどれがいいか(JSON-RPC,bitcoinjs-lib,bitcore-lib)
- さまざまなブロックチェーン技術
- 【総まとめ】ブロックチェーンの仕組みと、ブロックチェーンの今後について学んでみる
- ブロックチェーンで Hello world! (Minimum Viable Block Chain)
- pycoinでビットコインの簡易ウォレットを作ってみた
- ビットコインにおける匿名性を高める技術
- bitFlyer APIを利用して自動的にマネーを次世代通貨にフォワードする
- サーバーレスフレームワークTruffleでÐappを爆速開発する ②爆速で銀行を設立する
- P2SH まとめ
- マルチシグの仕組み(P2SH方式)
- Bitcoinのブロックチェーンに任意の80byteデータを刻みこむ
- イケてる ÐApps 100選
- アイドルとオタクがBitcoinで永久に消えないメッセージを刻む
- 翻訳: Proof of Workより「安い」方法は存在しない
- SHA-256ハッシュ関数をrubyで自前実装
- PythonからcoincheckのWebsocketAPIに接続する
- 初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その1【情報取得】
- 初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その2【APIで取引】
- 初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その3【ローカルBot】
- nanowalletに学ぶ、JavaScriptだけで暗号通貨のNEMアカウントを生成する方法
- 初心者が一攫千金を目指してBitcoin自動取引botを作るよ! その4【サーバレス化】
- PycoinでBitcoin Testnetに接続
- .NET Core で bitcoin の送金をしてみる on Ubuntu
- Gitとブロックチェーンの関係
- bitcoindをdockerで環境構築する
- Node.jsとNEM-sdkを利用して仮想通貨XEMのばらまきサイトを超簡単に作る。
- 公平なランサムウェア
- Mac OS XでモナーコインをCPUマイニングする
- 【飲食店では世界初】Ethereum上でICO(イニシャルコインオファリング)のコード監査をした話
- [Node.js]ブロックチェーンアドレスを生成してみた – 中級編 –
- Bitcoinのコードをまとめるためだけのページ
- bitcoinのSegWitの仕組み
- クラウドの力を借りて無限収入システムを構築する(はずだった)
- TensorFlow(LSTM)でBitcoinの価格予想
- Python – bitflyerから一定間隔でビットコインレートBTC/JPYを取得してファイルに保存
- Bitcoin Core を AWS で動かしてみる
- ビットコイン自動裁定取引システムを開発・トレードした結果
- Zaif取引所のAPIで仮想通貨の売買価格を取得しチャートを作成する
- NEM/mijinにおけるマルチシグのユースケースについての考察
- 【謝罪】皆様が利用している間に、コインマイニングしていた話【Coinhive】
- 【エンジニア向け】ビットコインを学んでブロックチェーンを完全に理解する【第一回 歴史とネットワーク】
- ビットコイン裁定取引のチャンスを可視化する
- (随時更新) BlockChainハッカソンマニュアル by Team AI
- 【エンジニア向け】ビットコインを学んでブロックチェーンを完全に理解する【第二回 トランザクション】
- ビットコイントランザクションの中身を詳しく見てみる
- 各ビットコイン取引所APIの認証で陥りやすいポイント
- Counterpartyの技術情報 まとめ
- BIP 0001【翻訳】
- ブロックチェーンを作ることで学ぶ 〜ブロックチェーンがどのように動いているのか学ぶ最速の方法は作ってみることだ〜
- ビットコインアドレスを自分の手で作って理解する
- Beyond Blockchain(bbc1)のインストールから起動まで
- とりあえずド素人が読むべきブロックチェーン入門論文・書籍・サイト
- Bitcoinを電気代”0円”でマイニングして稼ぐ!
- Bitcoin Standard Transactions(送信)
- Pythonで仮想通貨自動取引 (1) : 板情報取得と各取引所のレスポンスタイム計測
- ビットコインインフラとしてのelectrumx(server)
- NEM-sdk を使ってサーバーレスな無記名掲示板を作る
- 0からのブロックチェーン勉強法
- ラズパイでBitZenyをCPUマイニングする -組み込みエンジニアだってお金が欲しい-
- ブロックチェーンによくある誤解と批判を紐解いてみる
- Monacoinオンラインウォレットを作ってみよう
- 【Google Apps Script】その8 スクリプトを定期実行し、ビットコインの1分ごとの価格を自動取得する
- Rubyでブロックチェーンを理解しよう!!
- マイニングで一番稼げる仮想通貨は何か!?BTC・LTC・MONA・XMR・BCNの5種でベンチマークしてみた!
- 暗号通貨にまつわる事件/障害事例まとめ
- bitFlyer APIを使ってビットコインのFX取引をしてみる
- 海外の仮想通貨取引所が使いにくいので、LINEで話せる美少女コンシェルジュを作る
- Ethereumのアドレス生成アルゴリズム
- ビットコインの原論文を読んで俺のブロックチェーンをつくろう Part 1
- 仮想通貨NEMでLINEに発言させたりビットコインをマルチシグ送金させたり、いろいろやってみる。
- 仮想通貨取引所(bitbank.cc)の公式APIを使って仮想通貨の取引をする方法
- Script入門
- DQNで機械学習した人工知能がBitcoinをシストレして月700万円儲けるまでの話(失敗)
- 世の中にはびこるコンセンサスアルゴリズムを調査した件(Proof of X)
- Prophetを用いた時系列解析によるビットコイン価格予測
- 作って学ぶBitcoin!ゼロから作るSPVウォレット
- Bitcoin開発環境を構築する
- ビットコインの原論文を読んで俺のブロックチェーンをつくろう Part2
- できる!GolangでBTC自動取引
- 素人でもOK!?仮想通貨のマイニングをしてみる!!
- Zaif Paymentを使ってビットコイン&モナコイン仮想通貨決済システムをつくってみる
- CPUマイニングでも利益が出せる BitZeny を試してみる (Ubuntu編)
- Swiftでブロックチェーンを実装してみる
- Rubyでブロックチェーンを実装してみる
- Bitcoinが楕円曲線暗号の公開鍵からアドレスを生成する流れをシェル芸だけで実装してみる
- 0から仮想通貨を作るために知っておくべき技術【第1回アドレス編】
- 流行りに乗って仮想通貨(Bitcoin etc)を自動取引できるwebサービス作った
- Bitcoin: Lightning Networkによるマイクロペイメント
- 仮想通貨を扱うサービスが最低限するべきなセキュリティ対策
- Angularで可視化しながら、3通貨アービトーラージ(内部アービトラージ)の自動化実験をしてみた
- ディープラーニングでビットコインの価格予想
- 【2018年版】有力ブロックチェーン特徴まとめ18選
- Counterpartyでアプリを簡単に作ろう!
- [仮想通貨取引所]BitlflyerのRealtimeAPIをPythonで呼び出す
- Clojure でブロックチェーンを実装してみる
- Bitcoinの自動取引botのバックテストをしてみたら思ったより利益出てる
- 【Python】ビットコインの価格を教えてくれるLINE BOTを 右も左もわからない初心者がつくってみた
- ブロックチェーンにおける主要な攻撃や問題まとめ
- ビットガールズ埋蔵金を発掘した話
- こいつはすごい!ブロックチェーンプロジェクト ベスト5【2018年版】

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。