たけぼーの備忘録

暇を持て余した人間の無意味なブログ

Androidでデータベースの作成・更新中にProgressDialogを表示する

こんにちは。
今日は久しぶりにAndroidネタです。

開発中のアプリでSQLiteを使ったデータベースを使用しているのですが、今回そのデータベースの構造自体を大きく変更する必要が出てきました。

データベースの変更には少し時間がかかる上に、その間にどこか別の場所をタップされたりなんかしたら非常に面倒です。

ということで、この更新処理中にProgressDialogを表示させることにしました。

意外と手間取りましたので、メモしておきます。

ProgressDialogとは

ProgressDialogというのは、これです。
f:id:takebo_blog:20170811172139p:plain
上の画像では少しわかりづらいですが、左にはスピナー、右にはメッセージが表示されるダイアログです。

みなさんも、どこかでご覧になったことがあると思います。
よくデータを取得するときなんかに表示されたりしますよね。

今回は、これをデータベースの準備中に表示させようと思います。

実装

実装方法は非常にシンプル。
DatabaseHelperの中に、AsyncTaskを盛り込むだけです。

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

    private Context appContext;
    private int oldVersion,newVersion;

    public DatabaseHelper(Context context){
        super(context,"database.db",null,2);
        this.appContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL("テーブルの作成処理をここへ");
        db.close();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        this.oldVersion = oldVersion;
        this.newVersion = newVersion;
        new updateDB().execute(db);
    }

    public class updateDB extends AsyncTask<SQLiteDatabase,Void,Integer>{
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
            progressDialog = ProgressDialog.show(appContext,"データを更新中","この処理には少し時間がかかる場合があります");
        }

        @Override
        protected Integer doInBackground(SQLiteDatabase... params) {
            SQLiteDatabase db = params[0];
            //データベースの更新処理
            if(oldVersion == 1 && newVersion == 2) {
                db.execSQL("更新処理をここへ");
            }
            db.close();
            return 1;
        }

        @Override
        protected void onPostExecute(Integer result){
            progressDialog.dismiss();
            super.onPostExecute(result);
        }
    }
}

非同期処理の中にデータベースの更新処理を入れることで、ダイアログを表示しながら処理ができるようになります。
非同期処理を呼び出す際には、updateDB().execute()を使用します。

ポイントは、doInBackgroundの引数です。
execute()の引数がdoInBackgroundのparamsに配列として渡されます。

そのため、今回は変数dbをparams[0]に格納して受け渡ししています。

最後に

まとめてみると、とても簡単ですね。
ではまた。

Let's Encryptとはなにか、について調べる

lets-encrypt
こんにちは。ご無沙汰しております。

本業の方が大変忙しく、最近更新できておりませんでしたが、今日は張り切っていきたいと思います!

今日の話題は、Let's Encryptです。
こちらのブログでもたびたび話題にして参りました。

Let's Encryptは何者なのか

最近、ふと思ったんです。Let's Encryptって何者!?

皆さんの中にも私のように、不思議に思われている方もいらっしゃるのではないでしょうか。

ん?Let's Encryptって何?という方もいらっしゃると思いますので、簡単に説明しておきます。もう分かってるよ、という方は読み飛ばしてください。すでに理解されている方は、そもそもこちらの記事なんか読まないかもしれませんが(笑)

Let's Encryptとは

Let's Encryptは、無料SSL証明書を取得することが出来るサービスです。

そもそもSSL証明書って?

SSL証明書とは、httpsでの通信を可能にするために必要なものです。

URLがhttps:// で始まるホームページはご覧になったこと、ありませんか?
Chromehttpsのサイトにアクセスすると、アドレスバーの左端に緑の鍵マークが現れます。
https

httpsSSLという暗号化技術によって、データのやりとりを暗号化するものです。

そう、SSL証明書SSLは、暗号化技術の名称を表していたんです。

例えるなら、SSL証明書運転免許証のようなものです。

運転免許証を持っている人は、しっかりとした運転技術を持っていると認められた人ですから、車が運転することを許可されたわけです。
さらに公的に発行された信頼度のあるものですから、身分証明にも使われますよね。

SSL証明書もこれに似たような機能を持っています。
暗号化を行うためには、と呼ばれる情報が必要です。
SSL証明書は、この鍵にあたる情報が含まれているため、ブラウザがこの鍵を使って暗号化を行うことが出来るようになります。

SSL証明書があって初めて暗号化することができる、というところが運転免許証と似ていますね。

さらに、SSLは相手の保証を行うものでもあります。
通信相手が実在することを、公的に信頼された機関が確認し、保証してくれます。
これがあるので、利用者は安心して暗号化できるわけです。

身元を保証する、というところが運転免許証と似ています。

一般的に、SSL証明書有料です。企業などで使われているものは、何万単位の費用がかかる高級(?)なものです。

無料で手に入る証明書

無料でこれを手に入れようと思うと、主に手段は主に

の2つがあります。

オレオレ証明書とはなにか

オレオレ証明書というのは、自分で作成した証明書のことです。

本来、専門の機関によって発行されるべき証明書を自分で生み出すわけですから、当然費用はかかりません。
しかし逆に、自作した証明書ということは、公的な機関から認証を受けない、ということになります。よって、この証明書に対しての信頼度は低くなるです。

ですから、ブラウザを通してオレオレ証明書を使ったサイトにアクセスすると、デカデカと警告が出てしまいます
このサイト、危険なんじゃない?という警告です。だって、誰かよく分からない鍵を暗号化に使ってるんですから。

そんなサイトにアクセスしますか?私ならしないでしょうね(笑)

なぜオレオレ証明書が必要なのか

では、なぜオレオレ証明書なるものが存在するかと言いますと、そもそも証明書がなければhttpsで通信できないからです。

これは先ほど説明したとおり、鍵が必ず必要だからです。
逆に、証明書さえあればhttpsで通信できます。

オレオレ証明書なら、通信する相手を保証してもらうことはできないけど、とにかく暗号化通信が始められるわけです。
昔は公的な機関から発行される証明書は有料のものしかなかったため、お金をかけずにとにかく暗号化するために、これが使われていました。

ここまでの話でお分かりの通り、オレオレ証明書は一般向けのサイトには向きません。だって、警告が出てしまいますから。
しかし、社内ネットワークで暗号化通信したい場合など、相手がすでに分かっていて保証の必要がない場合では、これで十分です。ブラウザを通さずにhttpsにて通信する場合もそうですね。

Let'sEncryptとは?

それに対して、Let'sEncryptとはなんでしょうか。

Let's Encryptにて提供されるのは、秘密鍵証明書中間証明書の3種類で、公的に信頼度のある証明書です。
これが無料で取得できるんです。

では、Let's Encryptとオレオレ証明書はどう違うのでしょうか。
ずばり、これは誰が発行するか、です。

オレオレ証明書が個人が勝手に発行したものであるのに対して、Let's Encryptはしっかりとした第三者機関によって発行されています。
これにより証明書に対する信頼度が格段に違うため、Let's Encryptで発行された証明書を使うと、無料でありながらブラウザで警告がでることなくhttpsで通信できるのです。

Let's Encryptは何者なのか

ここまで書いてまいりましたが、私はこんな疑問を抱いていました。

  • どこが発行しているのか
  • なぜ無料なのか
  • どのような仕組みなのか
  • 今後なくなることはないのか
  • 誰でも発行できれば、サイトの信頼性を保証できないのではないか

ここからは、これらの疑問を一つ一つ解決していく形で、書き進めていきます。

Q1.どこが発行しているのか

一体どこが発行しているのでしょうか。
かなりの普及を見せているLet'sEncryptですから、発行元が怪しいところではないと思われますが、気になります。

なぜこんなに信頼されているのでしょうか。

A1.ISRGという非営利団体がサービスを提供している

では、ここでLet'sEncryptの公式ページを見てみましょう。

うわ、英語かよ!となった方、大丈夫ですよ!
非公式ですが、Let'sEncryptについてまとめている日本語サイトがあります。

こちらのLet'sEncryptについて、から少し引用させてもらいます。

非営利団体の ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。

これによると、ISRGという機関が運営しているようです。
調べてみると、ISRGというのはアメリカにある公益法人で、経済的・技術的・教育的な面でインターネット上での安全な通信を行う障壁を減らすことを目的としているようです。

firefoxの開発で有名なmozillaやサーバーなどの製品やサービスを手がけるCisco情報理論を確立した学者シャノンの出身校であるミシガン大学などの関係者が役員をつとめています。

さらにISRGは、先ほど紹介したmozillaCisco、さらにはfacebookchromeWordpress.comを運営するautomatticや日本でも利用者の多いJimdoなど、様々な企業や団体がスポンサーとなっています。

このスポンサーを見ると、ネット業界で名を馳せたサービスや商品のプロバイダばかりです。chromemozillaが関わっているとなると、信頼度が違いますね。

だからLet'sEncryptは信頼されているのです。逆にブラウザ側からすれば、自分たちがお金を出しているところから発行されているから、信用するといったところでしょうか。

Q2.なぜ無料なのか

無料の理由、これが気になります。どうして無料なのでしょうか。
もしかして、有料サービスのお試しとか?なんて思ってしまいます。

先ほどのISRGのスポンサーを見ていると、有料サービスのお試し、ということはなさそうですが…

A2.非営利団体が運営する全自動認証のSSL証明書だから

では、先ほどのLet'sEncrypt日本語サイトを見てみましょう。

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLSHTTPSTLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

ここが、無料である一つの理由です。

Let'sEncryptの手続きはすべて自動で認証されています。
つまり、人の手が関わっていないわけです。
ですから、運営にかかる費用がうんと低くなるわけです。

さらに運営元のISRGは非営利団体ですから、元からお金を取る気はありません。

こんな理由で、無料で利用できるわけです。
役員のメンバーやスポンサーを見た限り、今後も有料化することはないでしょう。

先ほど、非営利団体が運営する全自動認証のSSL証明書だから無料なのだ、と書きましたが、私はその奥に別の理由もあるのではないかと思っています。

発行を行うISRGの出資元は、ほとんどが企業ですから、なにか目的があって出資するのだと思います。

例えば、chromeの開発元であるgoogleは、常時SSLを推奨しています。
これはサイトがハッキングされ、マルウェアに感染することを防ぎたいと考えているようです。これらのマルウェアに汚染されたサイトが、自分達のサービスに悪影響を与えるかもしれませんから。

しかし、有料の証明書しかなければ、金銭的な理由からなかなか常時SSLのサイトは増えません。
個人でやるブログなんかは、あまり常時SSLにする必要性を感じにくいですから。

ですから、常時SSLの普及にはLet'sEncryptのようなサービスが欠かせないわけですね。

このように、様々な企業や団体の思惑が重なった結果として、Let'sEncryptという無料のサービスが出来上がったわけです。

こんな理由もあるのではないかな、と私は思います。

Q3.どのような仕組みなのか

先ほど、自動化という出てきましたが、どのようにして証明書の発行を行うのでしょうか。

人力の発行ではない、ということは何となくお分かりいただけているのでは、と思います。

A3.クライアントソフトと認証局が発行を自動化している

Let'sEncryptにおける認証方法

認証には、独自のクライアントソフトを使って行います。

このクライアントソフトはcertbotと呼ばれ、多くのLinuxディストリビューションmacOS版が公開されています。
残念ながらWindows版のcertbotはないので、ほかのツールを使うか、最近Windowsで利用可能となったbashを使うこととなります。

取得したいドメインを本当に証明するために、Let'sEncryptには主に2種類の認証方法が用意されています。それは

  • ドメインDNSレコードに指定されたレコードが存在するか
  • 指定されたURLに認証用ファイルが存在するか

の2つです。

DNSでの認証では、_acme-challenge.(自分のドメイン名)に指定されたTXTレコードを設定します。
これを行うためには、DNSを自分で設定できる環境でなければならず、レンタルサーバーでは実現出来ないことが多々あります。

ファイルにて認証する場合、指定されたパスに指定されたファイルを置き、それを確認するというものです。
これは多くの方が実行可能でしょう。ホームページを運営しているなら、ファイルをアップできない、なんてことはあり得ませんから。

しかし、メールサーバーなどではこれは可能でないかもしれません。そんなときはDNS認証を行います。

認証を行う仕組み - ACME

認証の仕組みは少し専門用語が多くなります。暗号化に対する基礎知識がないと厳しいかもしれません。

でも大丈夫です。認証の仕組みを知らなくてもちゃんと使えるようになっています!

認証には、ACMEという通信プロトコルにて、クライアントソフトと認証局とのやりとりが行われます。

まず、クライアントソフトは認証してほしいドメイン認証局に通知します。

認証局はその通知に対して、認証に必要な情報をクライアントソフトに送ります。
ここで送られる情報は、認証用の番号認証用ファイルで、認証局によって自動的に生成されます。
認証用ファイルは、先ほど説明したファイル認証でサーバーにアップロードする為のもので、DNS認証の場合にはファイルの代わりに登録すべきDNSレコードが送られます。

クライアント側は認証に必要な設定(ファイル認証なら指定のパスにファイルをアップロードする)を行った後、認証のための準備ができたことを認証局に通知します。
このとき同時に、先ほど送られた認証用番号をクライアントソフトが生成した秘密鍵で署名し、公開鍵とともに認証局へ送ります。

認証局が認証に必要な設定がされたかを確認し、またクライアントソフトから送られてきた認証用番号の確認を行います。

すべて確認が終了すると、正式に認証されたことがクライアントソフトに通知されます。

この一連の流れで認証が自動で行われます。私たちが直接行わなければならないのはクライアントソフトの実行認証のための設定のみです。
認証自体の仕組みについては理解する必要はありません。

一度証明書が発行されたら、更新するのは簡単で、認証作業は必要ありません。

こちらが大変わかりやすく、参考になりました。詳しくは公式ページにも書かれています。

Q4.今後なくなることはないのか

Webサービスは、突如開発が中止されることはよくあります。

また、どこかの企業に吸収されてしまう、ということもしばしばです。

急に有料化してしまったら、httpsに対応させたものをわざわざhttpに戻さないといけないかもしれません。

それは非常に面倒ですよね。

では、無くなることはないのでしょうか。

A4.無くならない可能性が高い

正直なところ、Let'sEncryptが今後なくなる可能性はないとは言えません

しかし、googleSSLに対応しているかどうかを検索順位に考慮する、と発表するように、httpsの利用はさらに重視され普及が進むと思います。

ISRGが掲げる理念を基に考えると、この団体に金銭的な問題が起こらない限り、Let'sEncryptは無くならないでしょう。

スポンサーを見ると、主要なブラウザを開発する団体が資金提供を行っていますから、金銭的問題も起こりにくいのではないでしょうか。

つまり、Let'sEncryptが急になくなるとは考えにくいように思います。

Q5.誰でも発行できれば、サイトの信頼性を保証できないのではないか

最後の疑問となりました。
いろいろ調べていて、ふと思いました。

誰もが証明書を取得できたら、信頼性のある証明書では無いのではないでしょうか。

例えば、詐欺を行おうとする人であっても取得できるわけですから、サイトに対する信頼性を証明することが出来ないのではないか、と。

しかし、ここに私の思い違いがありました。

A5.サイト自体の信頼性を保証するSSL証明書は種類が別

SSL証明書httpsによって通信するためのツールであって、サイト自体の安全性を必ずしも保証するものではないのです。

私自身、『SSL証明書 = 安全性を保証する』という感覚を持っていましたが、実際にはそうとは限りません。

こちらにその事が丁寧に書かれています。

このページから引用すると、

SSL/TLSサーバ証明書には「ドメイン認証」「企業実在認証」「Extended Validation(EV)」の3種類が存在します。ドメイン認証は最も手軽な反面、ドメインの使用権のみを認証する証明書しか発行できません。組織の実在認証をするためには「企業実在認証」、「EV」を導入する必要があります。また企業実在認証もドメインの使用権と組織の法的実在の認証は可能ですが、それ以上の「組織の物理的実在」「組織の運営」などのより高度な認証を行うにはEVの導入が必要です。

と書かれています。

ここで書かれているように、企業実在認証EVでなければちゃんとした通信相手なのかを保証することはできないということです。

Let'sEncryptはドメイン認証を行うだけですから、ドメインが存在することを証明しただけですから、相手がどうであるかは証明されていないのです。

しかし、ブラウザでは緑の鍵マークがでて、いかにも安全です、という印象を与えます。

これでは、もし詐欺サイトで使われていた場合、間違った印象を与えるでしょう。

私はこれがLet'sEncryptの欠点なのではないかと思います。

証明書が有料であった昔は、証明書が安全の証のようになっていましたが、これを改める時が来たのかもしれません。

最後に

長々と書いてまいりましたが、いかがだったでしょうか。

Let'sEncryptは大変素晴らしいサービスですので、皆さんにぜひぜひ使っていただきたいです。

ではまた。

会員制の動画共有サイトの構築した

f:id:takebo_blog:20170706074140j:plain

こんにちは。
今日は、会員制Webページの構築についてです。

まずは、構築したきっかけから。
お急ぎの方は読み飛ばして下さい。

  • とある日の会話にて
  • 会員向けサイトの仕様
    • ①サーバーは有料のサーバーで、十分なスペック
    • ②ログイン機能にて、会員以外は見れないようにする
    • ③ユーザー名とパスワードは事前に個々に送信し、全ユーザー共通
    • ④ユーザーの新規登録は必要ない
    • ⑤ホームビデオを共有
    • SSLによるセキュリティ対策
  • 参考にしたサイト
    • テンプレート
      • ログイン画面
      • メインページ
    • ログイン機能の実装
    • 動画のプレイヤー
  • 最後に

とある日の会話にて

ある日、こんなことを言われました。

依頼主『君はプログラミングできるから、ホームページ作れるよね。』

自分『はい?簡単そうに言いますけどそれは…』

依頼主『ホームページは会員だけが見られるようなもので、セキュリティは万全にしといてね。』

自分(もう断る雰囲気じゃないじゃん…)


みなさん、こんな無茶ぶりされたことありませんか!?笑
私はありましたよ、つい最近。

プログラミングできるから、ホームページも作れるって…

その理論でいくとプログラマー全員がホームページ作れて、Webデザイナーが仕事を失うことになるんですよ!

というツッコミを入れたいところですが、いつもお世話になってる方なので断れません。

ということで、はじめて会員サイトを作ってみました。

続きを読む

無料で使えるHTMLテンプレートサイト『HTML5 UP』が素晴らしい

f:id:takebo_blog:20170705100017p:plain
こんにちは。今日はHTMLのテンプレートについてです。

手軽で良いものが作れる『テンプレート』

こんなことってありませんか?

  • 見た目の良いページを作りたいけど、時間がない!
  • HTMLやCSSなどの知識がない

Web屋ではない人がホームを一から作るのはとても大変ですよね。

こんなとき、ホームページ制作に一役買ってくれるのが、テンプレートです。

テンプレートなら少しの知識でとても見た目の良いホームページを作れます。

今回は、スタイリッシュで使いやすいテンプレートがたくさんある、HTML5UPというサイトをご紹介します。

続きを読む

Javaから見たSwiftとの違い ~自作関数編~

こんにちは。
今日は、前回に続きSwiftネタです。

Javaを使ってた人がSwiftを使うと困るときあるよねー、というシリーズです。

前回の記事はこちら。
for文について書きました。

今回は、自作関数についての諸々です。

続きを読む

Javaから見たSwiftとの違い ~for文編~

こんにちは。今回はSwiftネタです。

最近C#とSwiftに一気に手を出してしまったため、苦悶の日々を過ごしております(笑)

両方ちょっとだけ触ってみる予定だったのに…

そんなわけでSwiftに挑戦しているわけですが、よく分からないところが多い!

さらに、Swiftはバージョンがどんどんあがってるようで、今使われているのはSwift3というものだそうです。

そのため、ググってみても古い情報だった、なんてことがよくあります。

『ちょっと手を出したかっただけなのに、苦しめやがって、このやろう!』な気分なので、苦しめられたところをメモしていこうかな、と思います。

今回は、第一回としてfor文を扱っていこうと思います。

本記事をお読みの方へ

ここで注意点ですが、この記事はJavaなどのC言語的文法をもった言語から見ての感想が大いに含まれています。なぜなら私はJavaしか使ったことがない趣味のプログラマーだから。

ほかのもっとモダンな言語使いのプロフェッショナルな方々には、鼻で笑われてしまうような内容となっておりますので、これを読まずにもっとましなものをお読みください。

それでは参りましょう!

for文の基本構文

みなさん、for文使いますか?

うんうん、そうですよね、使いますよね!

巷では、for文を使わなきゃプログラミングしてるとは言わない、と言われてるとか言われてないとか。

ということで、Swiftでfor文を書こうと思うわけですが、これが一癖あります。

Javaではfor文は以下のようになります。

int a = 0;

for(int i = 0; i < 10; i++){
   a += i;
}

aに0から9までを足し続けるという、びっくりするぐらいのくそコードですが、その際そんなことはどうだっていいんです(笑)

C言語C#もほとんど一緒です。しかし、Swiftではこうなります。

var a = 0

for i in 0 ..< 10{
    a += i
}

for文が全然違うじゃないか!ってなりませんか!?
あっ、なりませんか。すいません。

少なくとも私はそう思いました。

forをいつものように書くとXcodeが怒ります。
おい、Cっぽい書き方をやめないか!的なエラーがでて驚かされます。

ここでぐぐってみると、Swiftにはモダンなforの書き方があって、上のものがそうだ、と知りました。

ちなみに、0..<10 は 0≦i<10 を、0...10は 0≦i≦10 を表すそうです。

上のソースを見ると、ちゃっかり型推論が使われています。varってなんかすごいなー、という気分になります。

色々なfor文

上に書いた書き方は、1ずつ増やして処理したい(i++する)時でしか使えません。ではそのほかの場合ではどうなるのでしょうか。

Javaと比較しながら書いておきます。見出しがJava的な書き方となっております。

for(i = 0; i < 10; i +=2)と書きたいとき

for i in stride(from : 0, to : 10, by : 2)

for(i = 0; i <= 10; i +=2)と書きたいとき

for i in stride(from : 0, through : 10, by : 2)

for(i = 10; i >= 0; i -=2)と書きたいとき

for i in stride(from : 0, through : 10, by : 2).reversed()

まとめ

stride()を使えば、刻み幅を変えることができます。toなら~未満を、throughなら~以下を表しています。

徐々に減らしていく処理では、最後にreversed()を付ければよいそうです。
ネットの記事ではよくreverse()とされていますが、そう書くとXcodeに怒られました。

最後に

いかがでしたでしょうか。今後もよく分からないところが出ましたら、その都度書いていこうと思います。

こういう書き方もあるよ!とかここは違うよ!といったアドバイスをいただけると、大変助かります。

ではまた。

Shawn MendesのThere's nothing holding me backを和訳してみた


There's nothing holding me backを和訳してみました。
訳がしっくりこないところが少しありますが、良い訳がありましたらご指摘いただけるとありがたいです。

There's nothing holding me back

I wanna follow where she goes

彼女の行くところについて行きたいな

I think about her

彼女のことを考える

and she knows it

それに、彼女もそれを知ってる

I wanna let her take control

彼女に僕を支配させたい思うんだ

'Cause everytime that
she gets close, yeah

だって、彼女はいつも寄り添ってるから

She pulls me
in enough to keep me guessing

彼女は僕が考えちゃうぐらいひっぱるんだ

And maybe I should stop
and start confessing

そして多分僕は考えるのをやめて打ち明け始めるべきだね

Confessing, yeah

打ち明けよう

Oh, I've been shaking

おお、震えてるよ

I love it when you go crazy

僕は君がクレイジーになるときが好きなんだ

You take all my inhibitions

君は僕の理性を奪う

Baby, there's nothing
holding me back

ああ、もう僕を引き止めるものは何もないよ

You take me places that
tear up my reputation

君は僕の名声を破るような場所に連れて行くよ

Manipulate my decisions

僕の決意を操るんだ

Baby,
there's nothing holding me back

ああ、僕を引き止めるものはもう何もないんだよ

There's nothing holding me back

僕を引き止めるものは何もないんだ

There's nothing holding me back

僕を引き止めるものは何もないよ

She says that she's never afraid

彼女は恐れたことなんかないって言うんだ

Just picture everybody naked

みんなが裸だって想像するだけ

She really doesn't like to wait

彼女はほんとに待つのが嫌いなんだ

Not really into hesitation

ためらったりしないんだよ

Pulls me
in enough to keep me guessing

彼女は僕が考えちゃうぐらいひっぱるんだ

And maybe I should stop
and start confessing

そして多分僕は考えるのをやめて打ち明け始めるべきだね

Confessing, yeah

打ち明けてしまおう

Oh, I've been shaking

おお、震えてるよ

I love it when you go crazy

僕は君がクレイジーになるときが好きなんだ

You take all my inhibitions

君は僕の理性を奪う

Baby, there's nothing
holding me back

ああ、もう僕を引き止めるものは何もないよ

You take me places that
tear up my reputation

君は僕の名声を破るような場所に連れて行くよ

Manipulate my decisions

僕の決意を操るんだ

Baby,
there's nothing holding me back

ああ、僕を引き止めるものはもう何もないんだよ

there's nothing holding me back

ああ、僕を引き止めるものはもう何もないんだよ

'Cause if we lost our minds

だってたとえ僕たちが理性を失って

and we took it way too far

突き進みすぎたとしても

I know we'd be alright,

大丈夫だって知ってる

I know we would be alright

大丈夫だって知ってるんだよ

If you were by my side

もし君が僕のそばにいて

and we stumbled in the dark

たとえ暗闇の中でよろめいたとしても

I know we'd be alright,

大丈夫だって知ってる

I know we would be alright

大丈夫だって僕は知ってるんだよ

'Cause if we lost our minds

だってたとえ僕たちが理性を失って

and we took it way too far

突き進みすぎたとしても

I know we'd be alright,

大丈夫だって知ってる

I know we would be alright

大丈夫だって知ってるんだよ

If you were by my side

もし君が僕のそばにいて

and we stumbled in the dark

たとえ暗闇の中でよろめいたとしても

I know we'd be alright,

大丈夫だって知ってる

I know we would be alright

大丈夫だって僕は知ってるんだよ

Oh, I've been shaking

おお、震えてるよ

I love it when you go crazy

僕は君がクレイジーになるときが好きなんだ

You take all my inhibitions

君は僕の理性を奪う

Baby, there's nothing
holding me back

ああ、もう僕を引き止めるものは何もないよ

You take me places that
tear up my reputation

君は僕の名声を破るような場所に連れて行くよ

Manipulate my decisions

僕の決意を操るんだ

Baby,
there's nothing holding me back

ああ、僕を引き止めるものはもう何もないんだよ

there's nothing holding me back

ああ、僕を引き止めるものはもう何もないんだよ

I feel so free

とても自由に感じるよ

when you're with me, baby

君が一緒にいるときはね

Baby,
there's nothing holding me back

ああ、もう僕を引き止めるものは何もないよ


There's Nothing Holdin' Me Back

There's Nothing Holdin' Me Back

  • ショーン・メンデス
  • ポップ
  • ¥250

思わず聞き入ってしまいますね。
ではまた。