Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20200519後編)Rails 5と6のセキュリティ修正、Ruby 3.0のGuildがRactorに名前変更、Node作者によるDeno登場ほか

こんにちは、hachi8833です。

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄

臨時ニュース

Railsのセキュリティ修正5.2.4.3と6.0.3.1がリリース(Rails公式ニュースより)

セキュリティ修正5.2.4.3と6.0.3.1がリリースされました。どちらも5件の脆弱性が修正されています。

念のため、昨日のウォッチに貼った4.2.11.3セキュリティ修正をもう一度貼っておきます。こちらで修正された脆弱性は1件です。

Ruby

Ruby 3.0に入るGuildが「Ractor」に名前変更

# 同リポジトリより
RN = 10000
CR = Ractor.current

last_r = r = Ractor.new do
  p Ractor.recv
  CR << :fin
end

RN.times{
  r = Ractor.new r do |next_r|
    next_r << Ractor.recv
  end
}

p :setup_ok
r << 1
p Ractor.recv

つっつきボイス:「こちらも準スクープという感じですが、Rubyに入る予定のGuildが名前変わったそうです」「お〜今度はRactorか😳」「RubyのアクターだからRactorらしいです😆」「ラクター😆」「記事書いてて何度もスペルミスしそうになりました😅」

参考: アクターモデル - Wikipedia

「一般名詞っぽい名称をやめたのかな?」「UnityにもGUILDという用語があるから紛らわしいみたいな話がありましたね↓」「たしかに既存の概念と同じ名前だと誤解を招くこともあるので、ユニークな名前の方がいいでしょうね👍」

参考: Unityゲーム開発者ギルド - Unityゲーム開発者ギルド(外部向け)

「Ractorごとにロックを完全に分離して通信ベースでやりとりするような形になるみたいですね」「元々Guildでもそれをやりたかったわけですし😆」「中身がGuildから大きく変わったわけではなさそう👀」「実装はこれからかな?」「並列化はまだだそうです」「Ractorのコードサンプル、数年前から見覚えある感じする」「アーキテクチャは随分洗練されてきた感ありますね😋」

# 同記事より
                  Ractor r
                 +-------------------------------------------+
                 | incoming                         outgoing |
                 | port                                 port |
   r.send(obj) ->*->[incoming queue]     Ractor.yield(obj) ->*-> r.take
                 |                |                          |
                 |                v                          |
                 |           Ractor.recv                     |
                 +-------------------------------------------+


接続することができる(r2.send obj on r1、Ractor.recv on r2)
  +----+     +----+
  * r1 |-----* r2 *
  +----+     +----+


接続することができる(Ractor.yield(obj) on r1, r1.take on r2)
  +----+     +----+
  * r1 *------ r2 *
  +----+     +----+

同時に待つことができる(Ractor.select(r1, r2))
  +----+
  * r1 *------+
  +----+      |
              +----- Ractor.select(r1, r2)
  +----+      |
  * r2 *------|
  +----+

「なるほど、Ractorに対してsend/receiveできるのか〜」「このモデルって最近どのぐらい使われてるんだろう?🤔」「lambdaとかとあんまり相性がよくないかも?🤔」「今Railsサーバーでやっているような部分はRactorなら確実に安全に回せるようになるでしょうね❤️」「期待しちゃいます😋」

「GVLをうまく制御できなかったのが今まで問題だったので、今後そこがやれるようになるのはよさそう👍」「希望が見えてきそう✨」「ちなみに今翻訳を進めている以下の記事(近日公開予定)↓はGVLの説明としてよく書けてると思うんですけど、後半でReactorについて説明されていて今回の名称変更を知りました」

参考: The Practical Effects of the GVL on Scaling in Ruby

sha256-animation: 暗号生成の様子をアニメーション表示(HackerNewsより)


つっつきボイス:「久々にHackerNewsから拾いました: 暗号生成の様子をシェルで逐一表示してくれるそうです」「おほ、なるほど😆」「見ていてついニヤニヤしちゃいますね😆」「ちょっと楽しい😋」

「Rubyで書いて3日前にアップしたみたい」「これgemじゃないのか😳」「ガチRubyで書いてる😆」「おぉ😳」「ncursesっぽいところはライブラリでやってるのかなと思って見たらgemspecファイルがなかったので😆」

「どうやってるのかなと思ったら力技で上書きしてるっぽい↓😆」「マジですか😆」

# sha256-animation/add.rbより
# -----
# Input
# -----
# defaults
numbers =
[0b01000000000000001111111111111111,
0b01000000000000000000000000000000,
0b01000000000000000000000000000000,
0b01000000000000000000000000000000,
0b01000000000000000000000000000000,
]
# arguments passed
if ARGV.size >= 2
    numbers = ARGV.map {|x| x.to_i(2)} # convert binary strings to integers
end

# ---------
# Animation
# ---------
total = numbers.inject(:+)
width = total.to_s(2).size

(numbers.size + 1).times do |i|
    system "clear"
    numbers.each.with_index do |x, j|
        print ("%032b" % x).rjust(width, " ")
        if j > 0
            if j <= i
                print " +"
            end
        end
        print "\n"
    end
    puts "--------------------------------".rjust(width, " ")

    if i == 0
        puts "" # numbers[0].to_s(2).rjust(32, "0").rjust(width, " ")
    elsif i < numbers.size # for each addition
        puts numbers[0..i].inject(:+).to_s(2).rjust(32, "0").rjust(width, " ")
        sleep 0.4 if i == numbers.size-1 # slight delay before the modulus function
    else
        puts (numbers[0..i].inject(:+) % 2**32).to_s(2).rjust(32, "0").rjust(width, " ") + " mod 2**32"
    end
    sleep 0.4
end
sleep 1.0

「ところでRubyのコードなのにtabとスペース混じりなのって久々に見た🤣」「違う世界線から来た感🤣」「仕事でやったら怒られが発生する😆」「こういうプルリク投げたらみっちり注意されそう😆」「まあ一発ネタだしいいんじゃないでしょうか😆」「もちろん😆」「エディタにスタイルお任せすればいいのに😆」「普段Ruby書いてない人なのかも☺️」

lockbox: Rails用のモダンな暗号化(Ruby Weeklyより)

# 同リポジトリより
class User < ApplicationRecord
  encrypts :born_on, type: :date
  encrypts :signed_at, type: :datetime
  encrypts :opens_at, type: :time
  encrypts :active, type: :boolean
  encrypts :salary, type: :integer
  encrypts :latitude, type: :float
  encrypts :video, type: :binary
  encrypts :properties, type: :json
  encrypts :settings, type: :hash
  encrypts :messages, type: :array
end

つっつきボイス:「これはencryptor gem↓とかattr_encrypted gemとかのオルタナっぽい」「あ、こういうのが既にあるんですね😅」「世の中的にはattr_encrypted gemがRailsでよく使われてます🧐」

「attr_encryptedは以下のような感じでよく使うんですけど、lockboxもそっくりですね: なのでlockboxをこれと比較してみればどんな機能があるかわかりやすいと思います☺️」「なるほど〜」

# attr-encrypted/attr_encryptedより
  class User
    attr_encrypted :ssn, key: 'This is a key that is 256 bits!!'
  end

「お、lockboxはkms_encryptedというgemを使ってKMSを指定できる↓ところがなかなかよさそう😋」「どっちもankaneさんが作ってるんですね😳」「きっとankaneさんのことだから、どちらもproductionで使ってそう❤️」「ankaneさんならやりそうですね😋」

# ankane/lockboxより
class User < ApplicationRecord
  encrypts :email, key: :kms_key
end

その他Ruby


つっつきボイス:「sportdbはサッカーの試合の結果をフェッチするgemだそうです⚽️」「プログラミングの練習でこういうのを作ったりしますよね☺️」「ところで今サッカーの試合できるんだろうか😆」「ドイツはやってるそうですよ😆」「つおい😆」

DB

PostgreSQLのDISTINCT ONでN+1問題を回避する(Ruby Weeklyより)


つっつきボイス:「これはDISTINCTONまで含めるヤツですね」「あ、ONが必要なのか😅」

-- 同記事より
  SELECT DISTINCT on (graphics.template_id) graphics.*
    FROM graphics
    WHERE team_id = :team_id AND template_id IN (:template_ids)
    ORDER BY template_id, created_at DESC

DISTINCT ONって使ったことないけどぽすぐれ独自みたい↓」

参考: » distinct onで重複なしのレコードを取得技術ブログ

DISTINCT自体はSQLにありますけど、ONを付けると式を評価した結果から特定のカラムだけを引っ張ってこられるということみたい」「へぇ〜!😳」「普通のDISTINCTは全部のカラムに対してかかりますけど、ONを付けると指定したカラムについてだけ1件目を取れるようだ」「そういうことでしたか😳」「でないとN+1にならない説明がつかなさそうですし☺️」

「そしてソリューションはRubyの中で生SQLを書くと」「そりゃそうだ😆」

# 同記事より
    statement = <<-SQL
        SELECT DISTINCT on (graphics.template_id) graphics.*
          FROM graphics
         WHERE team_id = :team_id AND template_id IN (:template_ids)
      ORDER BY template_id, created_at DESC
    SQL

「データベースのチューニング的な知識ですけど、知っておくと便利そう😋」「知らないとびっくりしそう😅」「こうやってRubyに生SQLを書く方法もあるでしょうし、生SQLを嫌がる人がいるならデータベースビュー↓でラップしておけばActive Recordレベルで普通に扱えるでしょうし🧐」

RDBMSのVIEWを使ってRailsのデータアクセスをいい感じにする【銀座Rails#10】

生SQLはお好き?

「ちなみに自分は生SQL苦手で〜す😅」「😆」「ほら、生SQLなら圧倒的に速いじゃないですか😆」「速いんですけど😅」「宣言的に書けるからシンタックスエラーも一発でわかりますし実行時エラーにならないからめちゃくちゃ信頼できますヨ😆」「そうなんですけど😅」

「自分もこの間80行ぐらいの生SQL書いてINSERT INTO SELECTでもりっとアップデートかけましたし😋」「それはアプリケーションの中で書いたんですか?」「そのときはバッチ処理ですね: 全ユーザーの特定期間内の特定データを日次で集計するみたいな」「なるほど😋」「INSERT INTO SELECTなら一発で、しかもトランザクショナルに書けますから: 同じことをRailsでループ回してやろうとするとクエリの数がめちゃ増えますし、途中で止まったときの再開方法も考えないといけませんし」「ですよね😆」「せっかくデータベース使ってるんだからACID特性を活用しないと😆」

参考: ACID (コンピュータ科学) - Wikipedia

「てな具合に自分はSQLで明らかにうまくやれるならそっちを使っています: Railsだと無駄にループが増えることもありますし、データがおかしくてNULLで落ちるみたいなことがSQLなら起こらないので😋」「😆」「もちろんRailsの世界でnowみたいに型変換が必要なものを注入するのと同等のことをSQLでしようとすると面倒ですけど😆」「せっかくRails使ってるのに何だかもったいなさそうで😅」「まあそういうものが多いときはSQLだと面倒だなって思います😆」

クラウド/コンテナ/インフラ/Linux/Serverless

GitHub Code Scanning(Publickeyより)


つっつきボイス:「ここで使ってるCodeQLって脆弱性解析エンジンなのか↓」「オープンソースなんでしょうか?」「買収したとあるぐらいなのでたぶん違うでしょうね☺️」

参考: CodeQL - GitHub Security Lab

「CodeClimateとかがこれまでやっていたことをGitHubが公式で始めたということなんでしょうね」「OSSプロジェクトが無料ということは、そうでないプロジェクトは使いたければお金払ってねと💰」「やってることはCodeClimateと同じなので特に新しくはないですけど☺️」


codeclimate.comより

「GitHubもそろそろ独禁法周りに注意が必要になってきたりして😆」「それちょっと思いました😆」「GitHubの勢い的にもかつてのマイクロソフトを思わせるところがありますし」「サービスがGitHubに統合される方がたしかに便利ですけど😅」

参考: 独占禁止法 - Wikipedia


「あと、GitHubのシェアがあまりに大きいからかもしれませんけど、サードパーティのこの種のサービスってGitHubには対応していてもGitLabのような他のリポジトリには対応してないところもときどきあるんですよ😢」「ありますね😆」「以前某静的解析サービスにGitLab対応できるかどうかを問い合わせたらできなくて、サポートにも聞いたら『貴重なご意見ありがとうございます』で終わっちゃいました😇」「ありゃ🤣」

GitLabの「Tech Stack Application」(Serverless Statusより)


同記事より


つっつきボイス:「これは何でしょう?」「記事の図↑をぱっと見したところGitLabの内部構造の話かと思ったら、GitLabの法人が使っているサービスについての解説みたい」「GmailとかLinkedInも入ってるしそれっぽいですね」「やっぱりSalesforceでつなぎ込んでるのか〜」「使ってるサービス全部書いてあるんですね😳」「記事の真ん中あたりにあるGoogleスプレッドシート↓でリストが公開されてます」

「こんなにたくさんサービスが😳」「さすが公開を重んじるGitLab😳」「それぞれのサービスにいくらかかってるのか気になります😆」「ユーザー名とか出てますけど大丈夫なのかしら?🤔」「たぶんそういうオープンな文化ということでやってるでしょうし、それなりの契約も結んでるでしょうし🧐」「そういえばシートの上の方にちゃんとapproveされてるって書いてますね」「へぇ〜😳」

「ここまでオープンにしてあると、これから組織を立ち上げる人に参考になりそうですね😋」「GitLab的にはかなり自信を持ったアプローチでしょうけど、それにしても大胆ですね」「たしかに」「もちろんGitLabはすべて承知のうえでやってるでしょうし、認証デバイス使ったりしてプライバシー周りは十分注意しているでしょうし🧐」「個人的には公開して大丈夫?って思いますけど😆」

その他クラウド(Serverless Statusより)


つっつきボイス:「ツイートとは関係ありませんけど、最近サーバーレスアーキテクチャって言葉をあんまり見かけなくなったのは、もう普通になってきたのかなって😆」「流行りを通り越して定着したのかもですね」「マイクロサービスというバズワードは完全に過渡期を過ぎた感😆」「もちろんマイクロサービスは取り組んでるところは取り組んでますけど☺️」

「まあビジネス上のアーキテクチャを考えればたいていどこかでRDBが絡んでくるので、すべてがサーバーレスになることはほとんどないと思いますし🧐」「ですよね」「あとサーバーレスという言葉が『マネージドの機能を使っている』という意味なのか、文字どおり『ステートフルなものがない』という意味なのかという点で誤解を招きやすいところがあるかなという気はします😆」「たしかに誤解が入りやすい😆」「マネージドのRDBを使っているのはサーバーレスと呼んでいいの?みたいな話😆」「ほんにそれ😆」

「もちろんサーバーレスそのものは普通にいいと思います: 自分も提案に入れますし🧐」「ふむふむ」「何をサーバーレスと呼ぶかですけど、自分の場合はだいたい『メンテナンスしたくないもの』😆」「まあたしかに😆」

JavaScript

Deno 1.0.0がリリース


つっつきボイス:「今話題のDeno」「社内Slackでも盛り上がってましたね」「えっこれ知らない😅」「デノではなくディーノだそうです」「つい男爵ディーノを思い出しちゃうんですけど😆」「それなし〜!🤣」「若い人知らないですよきっと😆」

参考: 男爵ディーノとは (ダンシャクディーノとは) [単語記事] - ニコニコ大百科

「Node.jsの作者が、Nodeでもう引き返せなくなったつらい部分を全部作り直したいってやり直したんだそうです↓😆」「上の記事見るとNodeの作者がめちゃめちゃ反省してますね😆」

「Denoは今のNodeと機能上の互換性がないみたいです😆」「ありゃ😆」「JavaScriptのレイヤは基本的に互換みたいなんですけど、まだライブラリやパッケージマネージャとかが整備されてないとかいろいろあるらしくて、とりあえずnodenvではインストールできなかった😇」「う〜む😅」「まあNodeじゃありませんし😆」

「なのでこれを使って何をするかはもう少し先の話っぽいんですけど、TypeScriptがビルトインされているあたりなんかは、それこそマイクロサービスでマイクロなものだけを作ったりするのによさそうですね👍」「ふむふむ」「まあ今のJavaScriptはnpm周りがいろいろ地獄味を帯びてますから😆、こうやってクリーンにやり直すのはいいかもしれませんね☺️」「新しもの好きの人はどうぞという感じで😆」


「それにしてもJavaScriptという言語の出自を考えたら、よくぞここまで成長したと思います😂」「たしかに😆」「PHPもいろいろ乗り越えてきてますけどそんな比じゃないですよね😆」「『セキュリティのためにJavaScriptはオフにしましょう』なんて言われてた太古の時代を知ってる者としては特に😆」「ECMAScriptの標準化もスゴいし💪」「JavaScriptがこんなに発展したのは、ひょっとしたら世の中を支配してたかもしれないMacromediaが消えたのも大きいかも😇」「言語は面白いな〜😆」

参考: マクロメディア - Wikipedia


後で公式サイトを見つけました↓。アイコンは恐竜のようです。


deno.landより

CSS/HTML/フロントエンド/テスト/デザイン

servo: Rust製のパラレルブラウザエンジン

つっつきボイス:「servoってブラウザエンジン?」「レンダリングエンジンじゃなくて?」「レイアウトエンジンですって」「しかもサムスンがやってる😳」「埋め込み系を想定してたりして」「どの辺がパラレルなんだろか😆」「犬のアイコンが謎🐶」

「コマンドがmachというあたりがちょっとそそる↓😋」「マークって何でしょう?😅」「今のmacOSの元になっているのがMach(マーク)カーネルというヤツです🧐」

# 同サイトより
./mach build --release
./mach run --release tests/html/about-mozilla.html

参考: Mach - Wikipedia

そういえばMachはドイツ語読みだと「マッハ」でしたね。

Servo(サーボ)とは、Mozillaの研究によって開発されているウェブブラウザ用レイアウトエンジンである。サムスンによってAndroidおよびARMプロセッサへ移植されている[3]。多くのコンポーネントは、きめの細かい、孤立したタスクによって処理される。Servoは高度な並列処理を行い、多くのコンポーネント(レンダリング、レイアウト、HTML解析、画像復号など)が独立したタスクによって処理される。プログラミング言語Rustによって開発されている。
Wikipediaより

「パラレルって要するにコンポーネントの処理がそうなってるということね😳」「Chromeもやれるところはパラレル化してるみたいですけど、Wikipediaの日本語を信じるなら、そのあたりをRustでもっと徹底的にやろうという企画なのかも、たぶん😆」「サムスンがやってるいうことは、最近のマルチコア化したスマホでパラレルに動くブラウザを目指しているのかもとちょっと思いました☺️」「『FirefoxのGeckoのコンポーネントをこのservoに置き換え始めてる』んですね😳」「Mozilla Reseachがやってるからそういうことなんでしょう☺️」


以下はつっつき後に見つけたツイートです。


github.com/servo/servoより

iOSのブラウザ

「そういえば最近はどうなのか知りませんが、iPhone用のブラウザってガワはFirefoxやChromeとかでも中身のレンダリングエンジンはSafariのエンジン(WebKit)だったりしますね」「え、そうなんですか😅」「Appleのライセンス規約ではSafari以外のレンダリングエンジンを丸ごと入れてはいけないことになってたと思います🧐」「よく聞く話ですね〜😆」

参考: iPhoneではあらゆるWEBブラウザのエンジンがSafariと同じ? - いまさら聞けないiPhoneのなぜ | マイナビニュース
参考: WebKit - Wikipedia

「たしかAppleの規約だと、外部から受け取ったコードやバイナリによって動作を完全に変えてしまえるもの、つまりプログラム実行環境はアプリに搭載することを禁止してますよね」「そうそう😆」「ブラウザってまさにそれですし😆」「昔ScratchだかSqueakだかもiOS版を出そうとしたらそこをツッコまれて頓挫したという話も聞きました😇」「要はプログラムを書いて実行できるアプリはダメという😆」「プログラム書いちゃダメなんだ、へ〜、って当時思いました😆」「まあ気持ちはワカル😆」

「あ、だからiPadを開発環境にするみたいな話があんまり出てこないのか😳」「今ならオンラインIDEにすればやれますけど☺️」「2010年頃にはそんないいものありませんでしたよ😆」「当時はニーズもなかったでしょうし、利用者の環境も追いついていなかったから商売にはならなかったでしょう😆」

その他

置くだけ?


つっつきボイス:「Brewletって日本人ならもう青いアレしか連想しない😆」「小林製薬😆」「置くだけ😆」「作者日本人じゃないからその意図はなさそう😆」「Macに入れようか迷ってます😅」「appletのletみたくBrewletという接尾語をつけたんでしょうけど😆」「きっとそう😆」「はいそれだけでした〜」

MacとWindowsでのパッケージ管理

「でもHomebrewのパッケージってそんなに頻繁にアップデートします?」「私は所在ないときに割とアップデートしちゃいます😅」「まあアップグレードされたらまずいものはpinすれば別にいいのか☺️」「PostgreSQLとかはpinしてます」

参考: Homebrewのupgradeで無視したい - 銀の弾丸、はじめました

「ちなみにWindows環境だとHomebrewの代わりに何使ってます?」「WindowsにはHomebrewなんかありませんけど😆、最近はArch Linuxの勢いのよさに媚を売ってManjaro Linux使ってるのでpacmanコマンドとかyayコマンドとか使ってます😆」「媚って😆」「未だにpacmanコマンドのオプション覚えられない😆」

参考: pacman - ArchWiki
参考: Arch Linux に yay をインストール - Qiita

メモリ64GBはもう当たり前?

「Windowsでここまで環境構築したんで、もうMacに戻そうと思わないかな〜😆」「😆」「Macで同じスペック実現するならチーズおろし器買わないと😆」「先週もチーズおろし器の話出てましたけどそれ何でしたっけ?」「最近のタワー型Mac↓😆」「あれチーズおろし器って言うんですか😆」「本物はAmazonで1,500円ぐらいで買えますし😆」

「そして本当にチーズおろしてる人↓🤣」

参考: iFixit、新Mac Proで「チーズおろし」を敢行。みごと細切れに - Engadget 日本版

「中にMac mini入れて動かしたい😆」「タワーMacは細長いからMac miniみたいに正方形だと入るかな〜?😅」「Amazonで買ったゴミ箱でガチでPC組み立てた人いましたね😆」「あれは頑張れば入りそう😆」

「まあ今のWindows環境は快調ですよ、とりあえずメモリ64GBに16コアあれば困ることがないってわかりましたし😆」「Chrome起動したら結構メモリ食いそうですけど😆」「いえいえ、Chrome立ち上げてもまだ20GBぐらい空いてますし、Hyper-Vに割り当てるメモリをケチらなくてもいいし、もう心の余裕が全然違う🥰」「それは幸せですね〜😆」「富豪は富豪でもビリオネア💰」「今はもうメモリ32GBだと全然足りないですよ😆」

参考: 富豪的プログラミング - 増井俊之

番外

これは欲しい


つっつきボイス:「あ〜穴開けられそう🤣」「そう思いますよね🤣」「開けてみたい😆」「持ち運びできるのは大きな価値だとは思うんですけどね〜」「これは電車に乗るときに嬉しいヤツでしょう😋」

「イメージ的には京都に持ってって使う感じですかね〜、京都って移動大変だから」「あ〜なるほど」「こういう電動カートって今公道を走れるようになってたと思います☺️」「やっぱり免許ないとダメでしょうね😅」「電動車椅子と同じくくりなら免許なくてもイケそうですけど😆」「スピードが遅いから大丈夫そう」「時速10kmなら早歩きレベルでしょう😆」

参考: 公道を走れる”電動三輪車”が登場!?|クラウドファンディングで販売開始|【業界先取り】自動車ニュース2020国産車から輸入車まで【MOTA】


後半は以上です。

バックナンバー(2020年度第2四半期)

週刊Railsウォッチ(20200518前編)スライド『令和時代のRails運用』、Ruby 3.0のキーワード引数変更リスケ、Action CableのCLIほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Ruby Weekly

Awesome Ruby

RubyFlow

160928_1638_XvIP4h

Publickey

publickey_banner_captured

Serverless Status

serverless_status_banner

Hacker News

160928_1654_q6srdR


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。